Abstract Factory(抽象工厂)--对象创建模式
Abstract Factory (抽象工厂)–对象创建模式
一、意图
提供一个创建一系列相关或者相互依赖的接口,而无需指定它们具体的类。
二、动机
1.在软件系统中,经常面临着“一系列相互依赖的对象”的创建工 作;同时,由于需求的变化,往往存在更多系列对象的创建工作。
2.如何应对这种变化?如何绕过常规的对象创建方法(new),提供一 种“封装机制”来避免客户程序和这种“多系列具体对象创建工作” 的紧耦合?
三、适用性
1.一个系统要独立于它的产品的创建、组合和表示时。
2.一个系统要由多个产品系列中的一个来配置时。
3.当你要强调一系列相关产品对象的设计以便进行联合使用时。
4.当你提供一个产品类库、而只想显示它们的接口而不是实现时。
四、结构
五、效果
1.它分离了具体的类。
2.它使得易于交换产品系列。
3.它有利于产品的一致性。
4.难以支持新种类的产品。
六、实现
1.将工厂作为单件。
2.创建产品。
3.定义可扩展的工厂。
七、要点总结
1.如果没有应对“多系列对象构建”的需求变化,则没有必要使用 Abstract Factory模式,这时候使用简单的工厂完全可以。
2.“系列对象”指的是在某一特定系列下的对象之间有相互依赖、 或作用的关系。不同系列的对象之间不能相互依赖。
3.Abstract Factory模式主要在于应对“新系列”的需求变动。其缺点在于难以应对“新对象”的需求变动。
4.所有餐品都将返回类型所给的相同的抽象接口返回给客户。客户将不能区分或对一个产品的类型进行安全的假定。如果一个客户需要进行与特定的子类相关的操作,而这些操作却不能通过抽象的接口得到。虽然可以实现一个向下类型转型,但这并总是可行或安全的。
八、举例说明
家具工厂,要建椅子、凳子、桌子等,有些客户可能要木质的,有些客户可能要竹制的,还有些药塑料制的等,比较适合抽象工厂模式,根据具体不同(材质)系列工厂提供相应的产品。
本文为李建忠设计模式视频的笔记以及《设计模式-可复用面向对象的软件的基础》和自己的部分见解
Abstract Factory(抽象工厂)--对象创建模式相关推荐
- 设计模式学习总结1 - 创建型1 - Abstract Factory抽象工厂模式
AbstractFactory抽象工厂模式(创建型) 作用: 这种模式支持创建不同的对象,这些对象功能接近且一般都是在一起创建的.抽象工厂被具体化成不同的工厂来创建类似产品的不同产品.这种模式将类于使 ...
- Abstract Factory抽象工厂模式
抽象工厂模式是是用一个超级工厂去创建其他工厂,简单点说就是工厂的父类,属于创建型模式. 目标:提供一个创建一组对象的方法,而无需指定它们具体的类(同工厂方法). 使用场景:系统的产品有多于一个的产品族 ...
- 笔记:设计模式(3)-Abstract Factory抽象工厂模式
工厂模式的起源 1.变化点在"对象的创建",因此就封装"对象创建": 2.面向接口编程,依赖接口,而非依赖实现. 动机(Motivation) 在系统中,经 ...
- Java 设计模式之 Abstract Factory 抽象工厂模式
在工厂方法基础上,将工厂的生产方法的返回类型从具体产品抽象为抽象产品,同时扩展工厂的方法,支持任意定制产品族,则工厂方法可以升级为抽象工厂模式,比如一家餐厅可以提供牛排(方法A),红酒(方法B),蔬菜 ...
- 09Abstract Factory(抽象工厂)模式
技术交流QQ群:1027579432,欢迎你的加入! 1.Abstract Factory(抽象工厂)模式动机 在软件系统中,经常面临着一系列相互依赖的对象的创建工作.同时,由于需求的变化,往往存在更 ...
- 李建忠设计模式之“对象创建”模式
文章目录 工厂方法模式(Factory Method) 定义 动机 结构图 代码 要点 总结 抽象工厂模式(Abstract Factory) 定义 动机 结构图 代码 要点 总结 原型模式(Prot ...
- Prototype(原型)--对象创建模式
Prototype(原型)–对象创建模式 一.意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 二.动机 1.在软件系统中,经常面临着"某些结构复杂的对象"的 ...
- Singleton(单件)--对象创建模式
Singleton(单件)–对象创建模式 一.意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 二.动机 1.在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能 ...
- 设计模式、原则、饿汉式单例模式、抽象工厂、代理模式、观察者模式、模板方法模式使用场景
设计模式 对各种面向对象方法的一种总结.前辈们遇到了好多设计问题,然后利用面向对象解决了.然后他们把解决方案汇总起来,形成了20多种设计模式.它可以有效的帮助我们利用面向对象,来提高代码的复用性. ...
最新文章
- MFC中小笔记(三)
- 工厂模式 Factory
- B站获得英雄联盟赛事直播三年独播版权
- 力扣-386 字典序排数
- springboot自定义异常(全局捕获)
- android 自定义输入法布局,Android 输入法详解
- Linux学习笔记之 Btrfs文件系统简介及使用
- hadoop大数据平台搭建
- 微信打开链接提示用浏览器打开
- leaf Variable、requires_grad、grad_fn的含义以及它们之间的关系
- 面向对象-抽象类与接口
- 华为鸿蒙0系统桌面图标不能移动,win10桌面图标无法移动怎么办_win10为什么不能拖动桌面图标...
- python opcua使用教程
- 使用苹果发布证书打包好的ipa如何安装到ios手机上测试
- WiFi模块的AP模式和STA模式
- python中如何打开文件选择框
- 电视2k和4k有什么区别
- day6邮件自动发送
- 屏幕截图--截取全屏幕
- 计算机无法识别u盘,电脑无法识别u盘无法读取u盘的解决方法
热门文章
- Android之实现点击布局缩小然后再放大动画
- Android之用HttpURLConnection断点下载谷歌云存储(google cloud storage)文件
- LeetCode之Missing Number
- 如何快速学习freemarker以及使用经验
- html td显示隐藏,显示/隐藏Html TR/TD
- 元素周期表排列的规律_中考化学:金属活动性顺序表和元素周期表规律总结
- python如何开启多线程_Python如何创建多线程
- 06-广度优先搜索:图、队列
- 一元二次方程求根公式的花样变换,你看懂了吗?
- 波的折射现象,你都了解吗?