闲言少絮,代码ing...
/*
* 抽象工厂模式
*
* 要点:
* 1. 如果没有应对"多系列对象构建"的需求变化,则没有必要使用Abstract Factory模式,
* 这时候使用简单的静态工厂模式完全可以。
* 2. "系列对象"指的是这些对象之间有相互依赖、或作用的关系,例如游戏开发场景中的道
* 路、与房屋的依赖,道路与地道的依赖。
* 3. Abstract Factory模式主要在于应对"新系列"的需求变动。其缺点在于难以应对"新对象"的需求变动。
* 4. Abstract Factory模式经常和Factory Method模式共同组合来应对"对象创建"的需求变化。
*
*/
namespace AbstractFactory
{
using System;
//抽象道路
public abstract class Road
{
}
//抽象房屋
public abstract class Building
{
}
//抽象地道
public abstract class Tunnel
{
}
//抽象丛林
public abstract class Jungle
{
}
//实体道路 [现代风格]
public class ModernRoad : Road
{
}
//实体房屋 [现代风格]
public class ModernBuilding : Building
{
}
//实体地道 [现代风格]
public class ModernTunnel : Tunnel
{
}
//实体丛林 [现代风格]
public class ModernJungle : Jungle
{
}
//抽象工厂
public abstract class FacilitiesFactory
{
public abstract Road CreateRoad();
public abstract Building CreateBuilding();
public abstract Tunnel CreateTunnel();
public abstract Jungle CreateJungle();
}
//实体工厂 [现代模式]
public class ModernFacilitiesFactory : 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();
}
}
//客户程序
public class GameManager
{
FacilitiesFactory facilitiesFactory;
public GameManager(FacilitiesFactory facilitiesFactory)
{
this.facilitiesFactory = facilitiesFactory;
}
public void BuildGameFacilities()
{
Road road = facilitiesFactory.CreateRoad();
Building building = facilitiesFactory.CreateBuilding();
Tunnel tunnel = facilitiesFactory.CreateTunnel();
Jungle jungle = facilitiesFactory.CreateJungle();
}
}
//测试
public class runTest
{
public static void Main()
{
GameManager g = new GameManager(new ModernFacilitiesFactory());
}
}
}