4.5_abstract_factory_创建型模式:抽象工厂模式
创建型模式 --- 抽象工厂模式--- 内容:定义一个工厂类接口,让工厂子类来创建一系列相关或相互依赖的对象相比工厂方法模式,抽象工厂模式中的每个具体工厂都生产一套产品角色: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.使用简单工厂模式的解决方案 2.抽象工厂模式 抽象工厂模式结构 在什么情况下应当使用抽象工厂模式 抽象工厂模式的起源 四.抽象工厂模式的优缺点 抽象 ...
- 创建型设计模式——抽象工厂模式
1.什么是抽象工厂模式? 抽象工厂模式: 定义了一个interface用于创建相关或有依赖关系的对象簇,而无需指明具体的类. 抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合. 从设计层面看,抽 ...
- 创建型模式——抽象工厂模式
一. 实验目的与要求 1.练习使用工厂模式.设计相关的模拟场景并进行实施,验证模式特性,掌握其优缺点. 2.实验结束后,对相关内容进行总结. 二.实验内容 1.模式应用场景说明 手机CPU生产工厂:在 ...
- 创建型模式-抽象工厂模式
抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最 ...
- 软件架构设计师-创建型模式-单例模式-原型模式-工厂方法模式-抽象工厂模式-建造者模式
文章目录 1.单例模式 2.原型模式 3.工厂方法(Factory Method)模式 4.抽象工厂(AbstractFactory)模式 5.建造者(Builder)模式 6.作者答疑 在面向对 ...
- 设计模式-创建型模式-抽象工厂模式
工程源码:设计模式-创建型模式-抽象工厂模式https://download.csdn.net/download/qq_40788199/85544119 码云:设计模式-创建型模式-抽象工厂模式ht ...
- 创建型设计模式之工厂模式
文章目录 一.工厂设计模式 二.工厂设计模式详解 1.简单工厂模式 2. 工厂方法模式 3. 抽象工厂模式 总结 一.工厂设计模式 工厂模式就类比实际生活中的工厂,在实际生活中,用户从来不会关系一个物 ...
- Java设计模式—工厂方法模式抽象工厂模式
工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式. 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 通用类图如下: 在 ...
- 软件设计模式之工厂模式抽象工厂模式
一.工厂模式 工厂方法模式(别名:虚拟构造):定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. 工厂方法模式的关键是在一个接口或抽象类中 ...
- Head First设计模式读书笔记四 简单工厂 工厂模式 抽象工厂模式
本文示例代码材料源自Head First设计模式 以前整理自己整理的链接: 工厂模式 https://blog.csdn.net/u011109881/article/details/56541580 ...
最新文章
- 关于linux基础的博客,第一篇博客,以下。
- 氧气中国·创业创新大赛企业服务专场
- python变量和运算符
- C 标准库 - string.h
- gta5显示nat较为严格_为何严格治理下雾霾天仍频发?哈尔滨市环保局解答重污染天3大疑问...
- Qt工作笔记-对setupUi(this)进一步理解
- Instagram新推两款AI过滤工具,没错!背后功臣就是Deep Text
- pdfbox创建pdf_使用PDFBox处理PDF文档(新建PDF文件、修改PDF文件、PDF中插入图片、将PDF文件转换为图片)...
- VIP文档复制文字方法
- 泰坦尼克号数据_案例三:泰坦尼克号乘客的幸存预测_使用文档_机器数据分析平台...
- mysql写保护_简易修改注册表!小白都会去掉u盘写保护
- python检查验证_Python:在时间、日期之间进行检查。验证日期
- 用户行为分析(Python)
- 前端学习日志之复刻百度新闻女人专栏
- Python 让多图排版更加美观
- 史上最全的 SQL 注入资料,收藏不谢
- java画哆啦A梦_java如何绘制哆啦A梦 java绘制哆啦A梦代码示例
- C++图书管理查询系统
- 计算机视觉未来的挑战,搜狗斩获ICPR 2020人脸关键点检测挑战赛冠军 计算机视觉技术持续领先...
- 职场黑话大全(互联网公司百科版)
热门文章
- linux dns函数,Linux DNS (1)的基本概念
- JDK的bug导致Java文件删除不了,必须fgc
- oracle数据库存储管理总结,oracle数据库存储管理
- java中double与Integer直接比较大小是否可以?
- Apache POI操作Excel的坑
- java中实体类中实现Serializable接口的作用
- RabbitMQ消息订阅与轮询
- JS判断当前DOM树是否加载完毕
- 解决问题 xcrun: error: invalid active developer path
- 全新的PDO数据库操作类(仅适用Mysql)