如何选择使用创建型模式
继续考虑上面提到的游戏开发场景,假定在这个游戏场景中我们使用到的有墙(Wall),屋子(Room),门(Door)几个部件。在这个过程中,同样是对象的创建问题,但是会根据所要解决的问题不同而使用不同的创建型模式。
如果在游戏中,一个屋子只允许有一个门存在,那么这就是一个使用Signleton模式的例子,确保只有一个Door类的实例被创建。解决的是对象创建个数的问题。
示例代码:
在游戏中需要创建墙,屋子的实例时,为了避免直接对构造器的调用而实例化类,这时就是工厂方法模式了,每一个部件都有它自己的工厂类。解决的是“单个对象”的需求变化问题。using System;
![]()
public sealed class SigletonDoor
![]()
{
![]()
static readonly SigletonDoor instance=new SigletonDoor();
![]()
static SigletonDoor()
![]()
{
![]()
}
![]()
public static SigletonDoor Instance
![]()
{
![]()
get
![]()
{
![]()
return instance;
![]()
}
![]()
}
![]()
}
![]()

示例代码:
using System;
![]()
public abstract class Wall
![]()
...{
![]()
public abstract void Display();
![]()
}
![]()
public class ModernWall:Wall
![]()
...{
![]()
public override void Display()
![]()
...{
![]()
Console.WriteLine("ModernWall Builded");
![]()
}
![]()
}
![]()
public abstract class WallFactory
![]()
...{
![]()
public abstract Wall Create();
![]()
}
![]()
public class ModernFactory:WallFactory
![]()
...{
![]()
public override Wall Create()
![]()
...{
![]()
return new ModernWall();;
![]()
}
![]()
}
![]()