创建型模式
--- 抽象工厂模式---
内容:定义一个工厂类接口,让工厂子类来创建一系列相关或相互依赖的对象相比工厂方法模式,抽象工厂模式中的每个具体工厂都生产一套产品角色:1. 抽象工厂角色 (Creator)2. 具体工厂角色 (Concrete Creator)3. 抽象产品角色 (Product)4. 具体产品角色 (Concrete Product)5. 客户端 (Client)优点:1. 将客户端与类的具体实现相分离2. 每个工厂创建了一个完整的产品系列,使得易于交换产品系列3. 有利于产品的一致性 (即产品之间的约束关系)缺点:1. 难以支持新种类的 (抽象) 产品
from abc import ABCMeta, abstractmethod# ------ 抽象产品 ------
class PhoneShell(metaclass=ABCMeta):@abstractmethoddef show_shell(self):passclass CPU(metaclass=ABCMeta):@abstractmethoddef show_cpu(self):passclass OS(metaclass=ABCMeta):@abstractmethoddef show_os(self):pass# ------ 抽象工厂 ------
class PhoneFactory(metaclass=ABCMeta):@abstractmethoddef make_shell(self):pass@abstractmethoddef make_cpu(self):pass@abstractmethoddef make_os(self):pass# ------具体产品 ------
class SmallShell(PhoneShell):def show_shell(self):print('普通手机小手机壳')class BigShell(PhoneShell):def show_shell(self):print('普通手机大手机壳')class AppleShell(PhoneShell):def show_shell(self):print('苹果手机壳')class SnapDragonCPU(CPU):def __init__(self, high_config=False):self.high_config = high_configdef show_cpu(self):if self.high_config:print('骁龙CPU (高配版)')else:print('骁龙CPU')class MediaTekCPU(CPU):def show_cpu(self):print('联发科CPU')class AppleCPU(CPU):def show_cpu(self):print('苹果CPU')class Android(OS):def show_os(self):print('Android 系统')class IOS(OS):def show_os(self):print('IOS 系统')# ------ 具体工厂 ------
class MiFactory(PhoneFactory):def make_shell(self):return BigShell()def make_cpu(self):return SnapDragonCPU(high_config=True)def make_os(self):return Android()class HuaweiFactory(PhoneFactory):def make_shell(self):return SmallShell()def make_cpu(self):return MediaTekCPU()def make_os(self):return Android()class IPhoneFactory(PhoneFactory):def make_shell(self):return AppleShell()def make_cpu(self):return AppleCPU()def make_os(self):return IOS()# ------ client ------
class Phone(object):def __init__(self, shell, cpu, os):self.shell = shellself.cpu = cpuself.os =osdef show_info(self):print('手机信息:')self.shell.show_shell()self.cpu.show_cpu()self.os.show_os()def make_phone(factory):shell = factory.make_shell()cpu = factory.make_cpu()os = factory.make_os()return Phone(shell, cpu, os)# --- Client ---
p1 = make_phone(MiFactory())
p1.show_info()p2 = make_phone(IPhoneFactory())
p2.show_info()

4.5_abstract_factory_创建型模式:抽象工厂模式相关推荐

  1. 每天学习一个设计模式(八):创建型之抽象工厂模式

    目录 一.基本概念 二.通俗解释 三.应用场景 1.使用简单工厂模式的解决方案 2.抽象工厂模式 抽象工厂模式结构 在什么情况下应当使用抽象工厂模式 抽象工厂模式的起源 四.抽象工厂模式的优缺点 抽象 ...

  2. 创建型设计模式——抽象工厂模式

    1.什么是抽象工厂模式? 抽象工厂模式:  定义了一个interface用于创建相关或有依赖关系的对象簇,而无需指明具体的类. 抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合. 从设计层面看,抽 ...

  3. 创建型模式——抽象工厂模式

    一. 实验目的与要求 1.练习使用工厂模式.设计相关的模拟场景并进行实施,验证模式特性,掌握其优缺点. 2.实验结束后,对相关内容进行总结. 二.实验内容 1.模式应用场景说明 手机CPU生产工厂:在 ...

  4. 创建型模式-抽象工厂模式

    抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最 ...

  5. 软件架构设计师-创建型模式-单例模式-原型模式-工厂方法模式-抽象工厂模式-建造者模式

    文章目录 1.单例模式 2.原型模式 3.工厂方法(Factory Method)模式 4.抽象工厂(AbstractFactory)模式 5.建造者(Builder)模式 6.作者答疑   在面向对 ...

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

    工程源码:设计模式-创建型模式-抽象工厂模式https://download.csdn.net/download/qq_40788199/85544119 码云:设计模式-创建型模式-抽象工厂模式ht ...

  7. 创建型设计模式之工厂模式

    文章目录 一.工厂设计模式 二.工厂设计模式详解 1.简单工厂模式 2. 工厂方法模式 3. 抽象工厂模式 总结 一.工厂设计模式 工厂模式就类比实际生活中的工厂,在实际生活中,用户从来不会关系一个物 ...

  8. Java设计模式—工厂方法模式抽象工厂模式

    工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式.       工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 通用类图如下: 在 ...

  9. 软件设计模式之工厂模式抽象工厂模式

    一.工厂模式 工厂方法模式(别名:虚拟构造):定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. 工厂方法模式的关键是在一个接口或抽象类中 ...

  10. Head First设计模式读书笔记四 简单工厂 工厂模式 抽象工厂模式

    本文示例代码材料源自Head First设计模式 以前整理自己整理的链接: 工厂模式 https://blog.csdn.net/u011109881/article/details/56541580 ...

最新文章

  1. 关于linux基础的博客,第一篇博客,以下。
  2. 氧气中国·创业创新大赛企业服务专场
  3. python变量和运算符
  4. C 标准库 - string.h
  5. gta5显示nat较为严格_为何严格治理下雾霾天仍频发?哈尔滨市环保局解答重污染天3大疑问...
  6. Qt工作笔记-对setupUi(this)进一步理解
  7. Instagram新推两款AI过滤工具,没错!背后功臣就是Deep Text
  8. pdfbox创建pdf_使用PDFBox处理PDF文档(新建PDF文件、修改PDF文件、PDF中插入图片、将PDF文件转换为图片)...
  9. VIP文档复制文字方法
  10. 泰坦尼克号数据_案例三:泰坦尼克号乘客的幸存预测_使用文档_机器数据分析平台...
  11. mysql写保护_简易修改注册表!小白都会去掉u盘写保护
  12. python检查验证_Python:在时间、日期之间进行检查。验证日期
  13. 用户行为分析(Python)
  14. 前端学习日志之复刻百度新闻女人专栏
  15. Python 让多图排版更加美观
  16. 史上最全的 SQL 注入资料,收藏不谢
  17. java画哆啦A梦_java如何绘制哆啦A梦 java绘制哆啦A梦代码示例
  18. C++图书管理查询系统
  19. 计算机视觉未来的挑战,搜狗斩获ICPR 2020人脸关键点检测挑战赛冠军 计算机视觉技术持续领先...
  20. 职场黑话大全(互联网公司百科版)

热门文章

  1. linux dns函数,Linux DNS (1)的基本概念
  2. JDK的bug导致Java文件删除不了,必须fgc
  3. oracle数据库存储管理总结,oracle数据库存储管理
  4. java中double与Integer直接比较大小是否可以?
  5. Apache POI操作Excel的坑
  6. java中实体类中实现Serializable接口的作用
  7. RabbitMQ消息订阅与轮询
  8. JS判断当前DOM树是否加载完毕
  9. 解决问题 xcrun: error: invalid active developer path
  10. 全新的PDO数据库操作类(仅适用Mysql)