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();
}
}
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();
}
}
相关文章推荐
- Imode平台下使用原生数据创建3D模型_旋转
- Django 根据数据模型models创建数据表
- 支持“XX”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库
- 应用HTK搭建语音拨号系统3:创建绑定状态的三音素HMM模型
- 利用设计模式 Iterator 创建一个车库模型
- SharePoint 服务器端对象模型操作用户组(创建/添加/删除)
- silverlight与CSLA的快速应用06-创建实体模型
- Yii框架官方指南系列17——使用表单:创建模型
- COM线程模型 - Part VI - COM服务端(STA组件)创建线程
- IOS第八天(4:UITableViewController新浪微博, 代码创建布局和数据转模型)
- 创建模型
- matlab/simulink中simscape模块集快速创建物理模型
- thinkphp5模型创建主意事项
- activiti自定义流程之整合(三):整合自定义表单创建模型
- MVC中使用EF(1):为ASP.NET MVC程序创建Entity Framework数据模型
- 我的设计模式之旅(3)——抽象工厂模式AbstractFactory
- AbstractFactory抽象工厂模式
- 姜哥手把手教你做网站(5):创建商品模型
- ATL中的创建对象模型
- three.js 入门(创建模型的必要因素)