设计模式-抽象工厂

抽象工厂:创建对象,创建一组密不可分的对象

创建产品簇,多个对象是个整体,不可分割

工厂+约束

倾斜的可扩展性设计,增加产品很麻烦

/// <summary>
/// 一个工厂负责一些产品的创建
/// 产品簇
/// 单一职责就是创建完整的产品簇
///
/// 继承抽象类后,必须显式的override父类的抽象方法
/// </summary>
public abstract class FactoryAbstract
{
    public abstract IRace CreateRace();
    public abstract IArmy CreateArmy();
    public abstract IHero CreateHero();
    public abstract IResource CreateResource();

    //public abstract ILuck CreateLuck();
}
/// <summary>
 /// 一个工厂负责一些产品的创建
 /// </summary>
 public class HumanFactory : FactoryAbstract
 {
     public override IRace CreateRace()
     {
         return new Human();
     }

     public override IArmy CreateArmy()
     {
         return new HumanArmy();
     }
     public override IHero CreateHero()
     {
         return new HumanHero();
     }
     public override IResource CreateResource()
     {
         return new HumanResource();
     }
 }
/// <summary>
 /// 一个工厂负责一些产品的创建
 /// </summary>
 public class ORCFactory : FactoryAbstract
 {
     public override IRace CreateRace()
     {
         return new ORC();
     }

     public override IArmy CreateArmy()
     {
         return new ORCArmy();
     }
     public override IHero CreateHero()
     {
         return new ORCHero();
     }
     public override IResource CreateResource()
     {
         return new ORCResource();
     }
 }
/// <summary>
 /// 一个工厂负责一些产品的创建
 /// </summary>
 public class UndeadFactory : FactoryAbstract
 {
     public override IRace CreateRace()
     {
         return new Undead();
     }

     public override IArmy CreateArmy()
     {
         return new UndeadArmy();
     }
     public override IHero CreateHero()
     {
         return new UndeadHero();
     }
     public override IResource CreateResource()
     {
         return new UndeadResource();
     }
 }
{
     IRace race = new Undead();
     IArmy army = new UndeadArmy();
     IHero hero = new UndeadHero();
     IResource resource = new UndeadResource();
     //1 对象转移,屏蔽细节,让使用者更轻松
     //2 对象簇的工厂
 }
 {

     //System.Data.SqlClient.SqlClientFactory
     FactoryAbstract undeadFactory = new UndeadFactory();
     IRace race = undeadFactory.CreateRace();// new Undead();
     IArmy army = undeadFactory.CreateArmy();//new UndeadArmy();
     IHero hero = undeadFactory.CreateHero();//new UndeadHero();
     IResource resource = undeadFactory.CreateResource();//new UndeadResource();
 }
 {
     FactoryAbstract humanFactory = new HumanFactory();
     IRace race = humanFactory.CreateRace();
     IArmy army = humanFactory.CreateArmy();
     IHero hero = humanFactory.CreateHero();
     IResource resource = humanFactory.CreateResource();
 }

 {
     FactoryAbstract humanFactory = new ORCFactory();
     IRace race = humanFactory.CreateRace();
     IArmy army = humanFactory.CreateArmy();
     IHero hero = humanFactory.CreateHero();
     IResource resource = humanFactory.CreateResource();
 }
/// <summary>
/// War3种族之一
/// </summary>
public class Human : IRace
{
    public Human(int id, DateTime dateTime, string reamrk)
    { }
    public Human()
    { }

    public void ShowKing()
    {
        Console.WriteLine("The King of {0} is {1}", this.GetType().Name, "Sky");
    }
}

public class HumanArmy : IArmy
{

    public void ShowArmy()
    {
        Console.WriteLine("The Army of {0} is {1}", this.GetType().Name, "footman,火枪,骑士,狮鹫");
    }
}

public class HumanHero : IHero
{
    public void ShowHero()
    {
        Console.WriteLine("The Army of {0} is {1}", this.GetType().Name, "大法师、山丘、圣骑士、血法师");
    }
}
public class HumanResource : IResource
{

    public void ShowResource()
    {
        Console.WriteLine("The Army of {0} is {1}", this.GetType().Name, "1000G1000W");
    }
}

View Code

(0)

相关推荐

  • 面向对象23种设计模式系列(一)- 创建型设计模式

    本章是面向对象23种设计模式系列开篇,首先我们来看下什么是设计模式? 面向对象23种设计模式: 1.面向对象语言开发过程中,遇到的种种场景和问题,提出了解决方案和思路,沉淀下来就变成了设计模式. 2. ...

  • 设计模式——抽象工厂模式

    抽象工厂方法_将关联组件组装成产品 ** * 印刷抽象工厂类 * @author maikec * 2019/5/20 */ public abstract class AbstractPrintin ...

  • PHP设计模式之抽象工厂模式

    PHP设计模式之抽象工厂模式 工厂模式系列中的重头戏来了,没错,那正是传闻中的抽象工厂模式.初次听到这个名字的时候你有什么感觉?反正我是感觉这货应该是非常高大上的,毕竟包含着"抽象" ...

  • [PHP小课堂]PHP设计模式之抽象工厂模式

    [PHP小课堂]PHP设计模式之抽象工厂模式 关注公众号:[硬核项目经理]获取最新文章 添加微信/QQ好友:[DarkMatterZyCoder/149844827]免费得PHP.项目管理学习资料

  • 设计模式——把类作为参数的抽象工厂模式

    今天给大家介绍一个非常简单的设计模式,一学就会,非常好用. 这个模式叫做抽象工厂模式,大家可能对工厂模式比较熟悉,在工厂模式当中封装了实例的创建逻辑.主要的用途一般是将一些复杂的类的创建过程整合在一起 ...

  • 【重温设计模式】之004抽象工厂模式

    [重温设计模式系列源码] 抽象工厂模式 基本原理 含义 抽象工厂模式,即Abstract Factory Pattern,提供一个创建一系列相关或相互依赖对象的接口, 而无须指定它们具体的类:具体的工 ...

  • 无废话设计模式(1)--简单工厂、工厂方法、抽象工厂

    0-前言 简单工厂.工厂方法.抽象工厂都是创建型的设计模式,三个设计模式都是工厂的变种,不复杂,下面我们来快速学习这三种: 1-简单工厂模式 太简单,UML图就不画了,直接上代码: //------- ...

  • 设计模式-创建型-抽象工厂模式

    前一章节,我们介绍了简单工厂模式以及工厂方法模式,但是这两种模式都存在一定的局限性,只能生产某一类型下的某一种产品,如果需求变更,同类型下出现了不同的产品,比如芝士披萨不仅有口味上的不同,同时存在外观 ...

  • 创建型设计模式--工厂模式、抽象工厂模式

    一.小案例分析 1.功能需求: 实现一个发送信息的功能,要便于扩展与维护. (1)发送信息的工具有很多,比如短信.微信.邮件.QQ等. (2)选择某个工具进行信息发送. 2.小菜鸡去实现: (1)定义 ...

  • 【设计模式】(四)抽象工厂模式(Abstract Factory Pattern)

    【设计模式】(四)抽象工厂模式(Abstract Factory Pattern)