设计模式之工厂方法模式
2023-09-14 08:57:59 时间
前面学习了简单工厂 ,用了生产汽车的例子,上个例子是一个工厂生产BMW、Benz两种车,如果以后还需要生产Lambo、红旗等,按照简单工厂那就需要改工厂类的代码,这样扩展性不好,工厂方法能解决这个问题。
百度百科上写的还挺具体:
定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。首先完全实现‘开-闭 原则’,实现了可扩展。其次更复杂的层次结构,可以应用于产品结果复杂的场合。
工厂方法模式对简单工厂模式进行了抽象。有一个抽象的Factory类(可以是抽象类和接口),这个类将不再负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品。 工厂方法模式(Factory Method pattern)是最典型的模板方法模式(Template Method pattern)应用。 UML图:![](http://images2015.cnblogs.com/blog/733213/201509/733213-20150906140933670-442433067.jpg)
#import Foundation/Foundation.h #import "ILight.h" @protocol ICreator NSObject -(id ILight ) createLight; @end
2.具体工厂
1、BulbCreator工厂生产BulbLight
id ICreator bulbCreatorFactory=[[BulbCreator alloc]init]; [[bulbCreatorFactory createLight] turnOn]; id ICreator tubeCreatorFactory=[[TubeCreator alloc]init]; [[tubeCreatorFactory createLight] turnOff];
![](http://images2015.cnblogs.com/blog/733213/201509/733213-20150906151950686-98680246.jpg)
23种设计模式——工厂方法模式 工厂方法模式非常符合“开闭原则”,当需要增加一个新的产品时,我们只需要增加一个具体的产品类和与之对应的具体工厂即可,无须修改原有系统。同时在工厂方法模式中用户只需要知道生产产品的具体工厂即可,无须关系产品的创建过程,甚至连具体的产品类名称都不需要知道。
设计模式轻松学【四】工厂方法模式 工厂方法模式,又称工厂模式、多态工厂模式和虚拟构造器模式,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象
【设计模式】C#实现工厂方法模式 针对简单工厂中的缺点,使用工厂方法模式就可以完美的解决,完全遵循开闭原则。 定义一个用于创建对象的接口,让子类决定实例化哪个产品类对象。工厂方法使一个产品类的实例化延迟到其工厂的子类。
【C++设计模式】工厂方法模式 之前的简单工厂模式的最大问题:违背“开闭”原则,每当增加新的产品时,需要修改工厂类的逻辑。工厂方法模式不再使用工厂类统一创建所有的具体产品,而是让每个工厂只生产特定的产品。即让一个类的实例化延迟到其子类。
设计模式(五)_工厂方法模式 今天主要讲解的是工厂方法模式。内容参考自java_my_life 博主的博客。但是拒绝粘贴复制,全部手打 工厂方法模式是类的创建模式。工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作,推迟到子类中。
安卓源码中比较典型的工厂方法模式,Iterator,Iterator是一个接口,它定义了 迭代器的必须的一些规则,也就是说可以使用迭代器遍历元素的集合都是实现了这个接口,比如ArrayList,HashSet都是Collection的实现类,而Coll...
* 在讲工厂方法模式之前,先将一个简单工厂模式,这个模式实现了对象和被调用者的解耦,但是依旧有很多问题,工厂方法模式就是 * 从建工工厂模式演变过来的 *...
社会主义 从.Net到iOS,在撸的道路上越走越远,工作之余经营着博客园http://www.cnblogs.com/5ishare,欢迎小伙伴(妹子更好)一起交流,谈谈人生理想。作为经常从网上索取免费资料的一员,要有回报回报的思想,也让更多的人少走弯路.
相关文章
- VMware的Linux虚拟机桥接模式突然上不了网解决方法「建议收藏」
- Java单例模式的5种实现方法
- php 工厂方法模式
- 在Dubbo中,模板方法模式 用的真6!
- 安卓模拟器打开开发者模式(USB调试)的方法
- python产生随机数的方法_产生随机数的函数
- CSS 优化、提高性能的方法有哪些
- php设计模式(三):工厂方法模式 (Factory Method)
- 工厂方法模式 创建型 设计模式(三)详解程序员
- 重启Redis集群:方法与技巧(redis集群如何重启)
- Linux下快速拷贝文件夹的方法(拷贝文件夹linux)
- MySQL安装版的正确安装方法(mysql安装版怎么安装)
- 工厂方法模式(详解版)
- Spring isSingleton方法:判断是否定义Singleton模式
- Linux单用户模式(修改密码、运行级别)方法详解
- Linux下快速分割压缩文件的方法(linuxzip分割)
- Linux系统快速删除文件的方法(快速删除文件linux)
- 行模式进入Redis命令行模式的方法(进入redis命令)
- MySQL:关闭安全模式的方法(mysql关闭安全模式)
- 以单用户模式启动 CentOS/RHEL 7/8 的三种方法
- Redis单例模式的概念及使用方法(redis单例模式)
- 探析Oracle存档模式的实现和运用方法(oracle存档模式)
- MySQL数据库的主键设置方法,详细教程(mysql中主键怎么设置)
- MySQL 数据库删除记录的方法(mysql 中删除方法)
- 连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
- php去除换行符的方法小结(PHP_EOL变量的使用)
- JAVA实现单例模式的四种方法和一些特点
- Windows下获取Android源码方法的详解
- jquery.messager.js插件导致页面抖动的解决方法