具体参考抽象工厂(AbstractFactory)模式-创建型模式,本文在FactoryMethod工厂方法模式(创建型模式)的基础上进行业务进一步抽象,不做详细原理介绍.

1、在FactoryMethod工厂方法模式(创建型模式)的基础上,提出了一个代码上的需求,需要对前面的风格进行抽象,将相同风格的道路和房屋工厂类型进行抽象,这就是抽象工厂,代码如下:

    #region 抽象工厂///// <summary>///// 抽象的游戏建造系统///// </summary>public class BuildSystem{/// <summary>/// 具体的构建方法,Build方法的逻辑变化较慢(只需要创建2种风格的房屋和道路,总共8个对象),但是风格变化较快,由于需求变化,可能需要创建诸如卡通风格、另类风格等的房屋和道路/// </summary>public void Build(AbstractFactory cartoonFactory, AbstractFactory alternativeFactory){House HFirstStyleOne = cartoonFactory.CreateHouse();Console.WriteLine(HFirstStyleOne.ShowHouseStyle());House HFirstStyleTwo = cartoonFactory.CreateHouse();Console.WriteLine(HFirstStyleTwo.ShowHouseStyle());Road RFirstStyleOne = cartoonFactory.CreateRoad();Console.WriteLine(RFirstStyleOne.ShowRoadStyle());Road RFirstStyleTwo = cartoonFactory.CreateRoad();Console.WriteLine(RFirstStyleTwo.ShowRoadStyle());House HSecondStyleOne = alternativeFactory.CreateHouse();Console.WriteLine(HSecondStyleOne.ShowHouseStyle());House HSecondStyleTwo = alternativeFactory.CreateHouse();Console.WriteLine(HSecondStyleTwo.ShowHouseStyle());Road RSecondStyleOne = alternativeFactory.CreateRoad();Console.WriteLine(RSecondStyleOne.ShowRoadStyle());Road RSecondTwo = alternativeFactory.CreateRoad();Console.WriteLine(RSecondTwo.ShowRoadStyle());}}#region 抽象public abstract class House{public abstract string ShowHouseStyle();}public abstract class Road{public abstract string ShowRoadStyle();}#endregion#region 抽象工厂public abstract class AbstractFactory{public abstract House CreateHouse();public abstract Road CreateRoad();}#endregion#region 具体抽象工厂-负责系列对象的创建public class ModernFactory : AbstractFactory{public override House CreateHouse(){return new ModernHouse();}public override Road CreateRoad(){return new ModernRoad();}}public class ClassicalFactory : AbstractFactory{public override House CreateHouse(){return new ClassicalHouse();}public override Road CreateRoad(){return new ClassicalRoad();}}public class CartoonFactory : AbstractFactory{public override House CreateHouse(){return new CartoonHouse();}public override Road CreateRoad(){return new CartoonRoad();}}public class AlternativeFactory : AbstractFactory{public override House CreateHouse(){return new AlternativeHouse();}public override Road CreateRoad(){return new AlternativeRoad();}}#endregion#region 具体的实现public class ModernHouse : House{public override string ShowHouseStyle(){return "Modern现代化风格房屋";}}public class ModernRoad : Road{public override string ShowRoadStyle(){return "Modern现代化风格道路";}}public class ClassicalHouse : House{public override string ShowHouseStyle(){return "Classical古典化风格房屋";}}public class ClassicalRoad : Road{public override string ShowRoadStyle(){return "Classical古典化风格道路";}}public class CartoonHouse : House{public override string ShowHouseStyle(){return "Cartoon卡通化风格房屋";}}public class CartoonRoad : Road{public override string ShowRoadStyle(){return "Cartoon卡通化风格道路";}}public class AlternativeHouse : House{public override string ShowHouseStyle(){return "Alternative另类化风格房屋";}}public class AlternativeRoad : Road{public override string ShowRoadStyle(){return "Alternative另类化风格道路";}}#endregion #endregion

客户端调用代码如下:

        static void Main(string[] args){#region 抽象工厂BuildSystem buildSystem = new BuildSystem();buildSystem.Build(new CartoonFactory(), new AlternativeFactory());#endregionConsole.ReadKey();}

ok,根据输出可以发现,输出可以发现,抽象工厂也可以很好的解决提出的需求,而且,对工厂模式中的工厂类进行抽象,减少了工厂类.提供了代码的扩展性和可读性的同时,精简了代码,如果想继续减少工厂类,让代码保持前面的优势的同时,精简代码请参考:原型模式(创建型模式)

转载于:https://www.cnblogs.com/GreenLeaves/p/9795696.html

FactoryMethod工厂方法模式升级成AbstractFactory抽象工厂模式相关推荐

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

    1.new 的问题 常见的对象创建方法: //创建一个Road对象 Road road=new Road(); new的问题:实现依赖,不能应对具体实例的变化 怎么理解上面这句话呢? 可以这样理解:我 ...

  2. 抽象工厂模式_设计模式系列—抽象工厂模式

    前言 23种设计模式速记 单例(singleton)模式 工厂方法(factory method)模式 23种设计模式快速记忆的请看上面第一篇,前面说完了工厂方法模式,我们发现工厂方法模式存在一个严重 ...

  3. 【设计模式】11-15:迪米特拉(最小知识)原则、外观模式、建造者模式、观察者模式、抽象工厂模式...

    十一.迪米特拉原则/最小知识原则 如果两个类直接进行通信,那么这两个类就不能存在关系 调用其他类的方法时,需要第三个类实现转发-->外观类 尽量降低类的访问权限 十二.外观模式 隐藏系统的复杂性 ...

  4. 设计模式总结四(外观模式、建造者模式、观察者模式和抽象工厂模式)

    序 这么多天里,我已经读完了<大话设计模式>.放寒假了,没有了通过学业考试的重担,阅读技术书籍的时间页多出来了不少. 在今天我刚阅读了<kafka权威指南>的第一章,关于介绍k ...

  5. 工厂模式三部曲之三_抽象工厂模式(附三部曲源码)

    抽象工厂模式是对工厂模式的进一步抽象,是工厂模式中最为抽象和最具一般性的一种形态,提供了创建一系列相关或者相互依赖对象的接口,而无需指定他们的类型. 如果你对工厂模式还有些迷惑的,可以回顾下工厂模式的 ...

  6. Java设计模式-工厂模式(3)抽象工厂模式

    在Java设计模式-工厂模式(2)工厂方法模式 我们知道了工厂方法模式解决了简单工厂模式中的缺陷,做到了满足开闭原则,但是时代是进步的,进而又产生新的问题,工厂难道只能生产一种东西吗.我们所见到的工厂 ...

  7. php 抽象工厂类实例,PHP设计模式之抽象工厂

    这篇文章介绍的内容是关于PHP设计模式之抽象工厂 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 在学习过工厂方法之后,我所了解的工厂方法基本是去创建一个对象, 例如在玩游戏的时候,创 ...

  8. 实验5:配置通过静态工厂方法创建的bean、实例工厂方法创建的bean、(FactoryBean测试)★

    实验5:配置通过静态工厂方法创建的bean.实例工厂方法创建的bean.(FactoryBean测试)★ bean的创建默认就是框架利用反射new出来的bean实例 工厂模式:工厂帮我们创建对象:有一 ...

  9. 设计模式(4)--AbstractFactory(抽象工厂模式)--创建型

    1.模式定义: 抽象工厂是应对产品族概念的,提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类 2.模式特点: 抽象工厂模式为创建一组对象提供了一种解决方案.与工厂方法模式相比,抽象工 ...

最新文章

  1. Linux 允许指定IP访问目录
  2. SpringSecurity认证流程回顾
  3. mysql select count 5万条数据很慢_Mysql注入总结
  4. 天线接收功率计算公式_对讲机天线到底有多重要?通信效果好不好全靠它了!...
  5. [转载] python学习笔记(三)- numpy基础:array及matrix详解
  6. 重庆计算机一级考试在线做,全国(重庆考区)计算机一级考试教程.doc
  7. hashmap扩容_聊一聊HashMap
  8. PHP正则淘口令,Flutter代码锦囊---淘口令复制弹窗
  9. html设置首缩选进两字符,首行缩进2字符怎么设置 css
  10. Spring加载时报错处理
  11. python scapy2.3 在windows上的安装
  12. Js中${}字符串拼接
  13. 小萝莉和他的数学迷老爸
  14. 关于JS下offsetLeft,style.left,以及jquery中的offset().left,css(left)的区别。
  15. 【Matlab】MATLAB矩阵处理
  16. 区块链搭建eos开发环境
  17. 域控制器中五个角色基础(必记)
  18. 第九单元 DRF框架及APIView
  19. 计算机网络fmd是什么意思,不用就亏大了!酷炫又不用花钱的Win10“黑科技”
  20. 1553B数据总线用终端电连接器-DK-6211

热门文章

  1. 查询出来时间不对_2020年一级、二级建造师执业资格考试成绩可查询!
  2. mongodb php 存储文件大小,PHP MongoDB GridFS 存储文件的方法详解
  3. 3月 致 -.-- -..- -
  4. Kernel 社区 开发准备工作mutt 邮件使用
  5. linux 卸载模块命令,Linux中module模块的编译、加载、卸载
  6. linux c 头文件,linux下的头文件 及C/C++头文件 一览表
  7. linux环境变量堆栈,情景linux--如何摆脱深路径的频繁切换烦恼?
  8. Nginx强制https访问
  9. android连接sqlite进行简单的增删改查和事务管理
  10. 用Kettle的一套流程完成对整个数据库迁移 费元星