您的位置:首页 > 其它

AbstractFactory 抽象工厂模式(创建模型)

2007-04-04 21:20 337 查看
提供一个接口,让该接口负责创建一系列“相关或都相互依赖的对象”,无需指定它们具体的类。

1、如果没有应对“多系列对象构建”的需求变化,则没有必要使用Abstract Factory模式,这时候使用简单静态工厂完全可以。
2、“系列对象”指的是这些对象之间有相互依赖、或作用的关系,例如游戏开发场景中的“道路”与“房屋”的依赖,“道路”与“地道”的依赖。
3、Abstract Factory模式主要在于应对“新系统”的需求变动。其缺点在于难以应对“新对象”的需求变动。
4、Abstract Factory模式经常和Abstract Method模式共同组合来应对“对象创建”的需求变化。



//==============================================

//道路
abstract class Road
{
}

//房屋
abstract class Building
{
}

//地道
abstract class Tunnel
{
}

//丛林
abstract class Jungle
{
}

//场景工厂
abstract class FacilitiesFactory
{
public abstract Road CreateRoad();
public abstract Building CreateBuilding();
public abstract Tunnel CreateTunnel();
public abstract Jungle CreateJungle();
}

//==============================================

//一组场景,可以根据系统实际的扩展需要,扩展出多组场景;变化点;

class ModernRoad : Road
{
}

class ModernBuilding : Building
{
}

class ModernTunnel : Tunnel
{
}

class ModernJungle : Jungle
{
}

class ModernFacilities : FacilitiesFactory
{
public override Road CreateRoad()
{
return(new ModernRoad());
}

public override Building CreateBuilding()
{
return(new ModernBuilding());
}

public override Tunnel CreateTunnel()
{
return(new ModernTunnel());
}

public override Jungle CreateJungle()
{
return(new ModernJungle());
}
}

//==============================================

//客户程序;稳定点
class GameManager
{
private FacilitiesFactory facilitiesFactory;
private Road road;
private Building building;
private Tunnel tunnel;
private Jungle jungle;

public GameManager(FacilitiesFactory facilitiesFactory)
{
this.facilitiesFactory = facilitiesFactory;
}

public void BuildGameFacilities()
{
road = facilitiesFactory.CreateRoad();
building = facilitiesFactory.CreateBuilding();
tunnel = facilitiesFactory.CreateTunnel();
jungle = facilitiesFactory.CreateJungle();
}

public void Run()
{
//相关操作
}
}

class Test
{
public static void GameMain()
{
GameManager g = new GameManager(new ModernFacilities());
g.BuildGameFacilities();
g.Run();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: