Abstract Factory

闲言少絮,代码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());
  }
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值