对于许久不用的东西,容易忘记。百度许久,也未能找到自己所要。 从今日起,有些东西就记载下来,不仅方便自己,希望能帮到他人吧!

定义:
为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据里氏替换原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。换言之,也就是这些抽象产品的具体子类的实例。工厂类负责创建抽象产品的具体子类的实例。

设计步骤:(三国王者)

1.创建抽象工厂(国家(魏蜀吴))

 package com.example.yancy.model.Abstract_Factory_Pattern;/*** 创建日期:2018/8/23 0023 on 10:05* 描述:三国抽象工厂类* 作者: yancy*/
public interface Kingdom {Shu factoryShu();Wei factoryWei();Wu factoryWu();}

2.创建具体工厂
皇帝工厂

 package com.example.yancy.model.Abstract_Factory_Pattern;/*** 创建日期:2018/8/23 0023 on 10:15* 描述:  每个国家的皇帝* 作者: yancy*/
public class EmperorKingdom implements Kingdom{@Overridepublic Shu factoryShu() {return new LiuBei();}@Overridepublic Wei factoryWei() {return new CaoPi();}@Overridepublic Wu factoryWu() {return new SunQuan();}
}

太子工厂

package com.example.yancy.model.Abstract_Factory_Pattern;/*** 创建日期:2018/8/23 0023 on 10:17* 描述: 每个国家的太子* 作者: yancy*/
public class PrinceKingdom implements Kingdom{@Overridepublic Shu factoryShu() {return new LiuShan();}@Overridepublic Wei factoryWei() {return new CaoRui();}@Overridepublic Wu factoryWu() {return new SunLiang();}
}

3.抽象国家
蜀国

package com.example.yancy.model.Abstract_Factory_Pattern;/*** 创建日期:2018/8/23 0023 on 10:07* 描述:蜀国    刘备统治* 作者: yancy*/
public interface Shu {}

魏国

package com.example.yancy.model.Abstract_Factory_Pattern;/*** 创建日期:2018/8/23 0023 on 10:07* 描述:  魏国 曹丕统治* 作者: yancy*/
public interface Wei {}

吴国

package com.example.yancy.model.Abstract_Factory_Pattern;/*** 创建日期:2018/8/23 0023 on 10:07* 描述:  吴国 孙权统治* 作者: yancy*/
public interface Wu {}

4.具体国家人物
刘备

package com.example.yancy.model.Abstract_Factory_Pattern;/*** 创建日期:2018/8/23 0023 on 10:18* 描述:刘备* 作者: yancy*/
public class LiuBei implements Shu{}

刘禅

package com.example.yancy.model.Abstract_Factory_Pattern;/*** 创建日期:2018/8/23 0023 on 10:21* 描述:刘禅* 作者: yancy*/
public class LiuShan implements Shu{}

曹丕

package com.example.yancy.model.Abstract_Factory_Pattern;/*** 创建日期:2018/8/23 0023 on 10:19* 描述:曹丕* 作者: yancy*/
public class CaoPi implements Wei{}

曹睿

package com.example.yancy.model.Abstract_Factory_Pattern;/*** 创建日期:2018/8/23 0023 on 10:20* 描述:曹睿* 作者: yancy*/
public class CaoRui implements Wei{}

孙权

package com.example.yancy.model.Abstract_Factory_Pattern;/*** 创建日期:2018/8/23 0023 on 10:18* 描述:孙权* 作者: yancy*/
public class SunQuan implements Wu{}

孙亮

package com.example.yancy.model.Abstract_Factory_Pattern;/*** 创建日期:2018/8/23 0023 on 10:23* 描述:孙亮* 作者: yancy*/
public class SunLiang implements Wu{}

在真实的系统中,产品等级结构的数目与每个产品等级结构中产品的数目(产品族)一般是不相等的。
有多少个产品等级结构,就会在工厂角色中发现多少个工厂方法。

优点:
1.它分离了具体的类
2.它使得易于交换产品系列
3.它有利于产品的一致性
缺点:
难以支持新种类的产品。

一般情况下,有多少个抽象产品,就有多少个工厂方法。(比如再增加皇后)。

OCP(开放-封闭原则(The Open-Close Principle,简称OCP))

在不改变产品等级结构的情况下,增加产品族就是意味着向每一个产品等级结构中增加一个或者多个新的具体产品角色,这时只需要向工厂等级结构中增加新的元素就可以了,具体的说,只需要增加新的具体工厂类就可以了。
在产品族数目不变的情况下,增加产品等级结构,相当于增加一个与现有产品等级结构平行的一个新的产品等级结构,这时需要修改所有的工厂角色,增加一个新的工厂方法,这是不支持OCP的。

23种设计模式-抽象工厂模式《三国王者》相关推荐

  1. 23种设计模式-抽象工厂模式介绍加实战代码

    1.描述 通俗一点来讲,抽象工厂模式就是在工厂方法模式的抽象工厂类中规范多个同类产品. 工厂方法模式是针对一个产品系列的,而抽象工厂模式是针对多个产品系列的,即工厂方法模式是一个产品系列一个工厂,而抽 ...

  2. 23种设计模式——抽象工厂模式

    目录 抽象工厂模式(AbstractFactory) 产品族 理解 UML图 优缺点 应用场景 抽象工厂模式VS和工厂模式 实例 数据访问(工厂方法) 数据访问(抽象工厂) 用简单工厂改造抽象工厂 C ...

  3. 23种设计模式之工厂模式学习笔记

    什么是工厂模式? 工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式.该模式用于封装和管理对象的创建,是一种创 ...

  4. 实践GoF的23种设计模式:建造者模式

    本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:建造者模式>,作者: 元闰子. 简述 在程序设计中,我们会经常遇到一些复杂的对象,其中有很多成员属性,甚至嵌套着多个复杂的对象 ...

  5. C++设计模式--抽象工厂模式

    前言 前面有两篇文章分别介绍了简单工厂模式和工厂方法模式,这两种模式都比较常见,今天介绍工厂模式的最后一种,抽象工厂模式. 抽象工厂模式(Abstract Factory Pattern)是所有形态的 ...

  6. 系统架构技能之设计模式-抽象工厂模式

    一.上篇回顾 上篇我们主要讲述了简单工厂模式和工厂模式.并且分析了每种模式的应用场景和一些优缺点,我们现在来回顾一下: 简单工厂模式:一个工厂负责所有类型对象的创建,不支持无缝的新增新的类型对象的创建 ...

  7. 23种设计模式——装饰者模式

    文章目录 23种设计模式--装饰者模式 1.装饰者模式概述 2.装饰者模式的结构 3.装饰者模式的实现 4.装饰者模式的应用场景 23种设计模式--装饰者模式 1.装饰者模式概述 背景 有些人为了早上 ...

  8. 【Go实现】实践GoF的23种设计模式:命令模式

    上一篇:[Go实现]实践GoF的23种设计模式:代理模式 简单的分布式应用系统(示例代码工程):https://github.com/ruanrunxue/Practice-Design-Patter ...

  9. 23种设计模式7_代理模式之一静态代理

    23种设计模式7_代理模式之一静态代理 1 基本介绍 代理模式:为其他对象提供一种代理以控制对这个对象的访问 代理模式也叫委托模式,它是一项基本设计技巧.许多其他的模式,如状态模式.策略模式.访问者模 ...

最新文章

  1. JavaCSV之写CSV文件
  2. Mysql增加、删除和修改列属性和约束,和一些有用的查询语句
  3. ios:CGContextRef 渲染中文问题
  4. cdrx4被禁用怎么解决_双显卡怎么切换到独立显卡
  5. Mybatis更新和删除数据
  6. TabControl控件用法图解
  7. CodeForces - 126B Password(KMP中next数组)
  8. linux训练python出现killed_Linux 查看进程被杀死的详情
  9. 反序列化的时候出现eof exception_FastJson序列化时候出现了$ref?还不赶紧学习下...
  10. 矩阵论复习-过渡矩阵、生成子空间、表示矩阵、度量矩阵、酉空间、内积
  11. (25)Verilog HDL循环语句:forever
  12. 微课|Python使用Barrier对象实现多线程同步
  13. org.springframework.web.client.RestClientException: Could not extract response
  14. [leetcode]63. 不同路径 II
  15. window-linux移植
  16. [转]10个学习Android开发的网站推荐
  17. iOS中使用URL Scheme进行App跳转
  18. XP系统无法远程桌面
  19. android 教程 百度云盘,【从零教程】带你从零编写自己的在线百度云盘 11-21更新...
  20. 搜款网根据关键词取商品列表 API 返回值说明

热门文章

  1. Thrift使用教程(Java版本)
  2. 单片机七阶音符_(单片机问题)让蜂鸣器发出do,ri,mi,fa,so,la,si,按这个顺序发声,每个音符各发声1秒....
  3. 本机emboss图片无法显示
  4. (三)代表性物质点邻域的变形分析
  5. sourceTree推送报错Unknown author
  6. 调用API中关联的证书问题
  7. 2)Cadence design entry hdl Tutorial原理图入门
  8. 互联网面试问题以及答案20200508
  9. 优云运维资深大牛:如何让CMDB配置维护更贴近人性
  10. Training Region-based Object Detectors with Online Hard Example Mining论文讲解