第二篇 设计模式之工厂方法模式
2016-10-11 23:47
246 查看
欢迎转载http://blog.csdn.net/Passi_zxj/article/details/52793255
通常包含
比如collection 中的迭代器 ,你使用迭代器之前你就该知道你的collection是什么类别,当然你就知道该调什么工厂去实现
只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂的决定权在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给使用者,而这个决策过程这对于使用者来说是透明的。(来自百度百科,目前我也不懂。。)
因此也解决了简单工厂里超大的switch的问题,本身简单工厂里的switch就处理了多个产品,所以耦合很重,现在再也不用担心会把这个switch撑爆啦!
降低了客户程序与产品间的耦合
当客户端更换对象时,不需要做大的改动(前提是已经有这个对象的工厂了)
简介
工厂类不再负责产品的创建,由工厂的子类负责通常包含
抽象工厂工厂基类,其接口子类必须实现
具体工厂工厂子类,在这里创建产品
抽象产品父指针指向的对象
具体产品子类指针指向的对象
背景
使用者清楚的知道哪个产品对应哪个工厂,然后他只需要去实例化这个工厂就可以。比如collection 中的迭代器 ,你使用迭代器之前你就该知道你的collection是什么类别,当然你就知道该调什么工厂去实现
只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂的决定权在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给使用者,而这个决策过程这对于使用者来说是透明的。(来自百度百科,目前我也不懂。。)
一言以蔽之
有了抽象工厂以后,每个产品的生产就都交给其子类(具体)实现了,遵循了抽象封闭原则//抽象产品 class Animal { public: void Walk() { printf("i am walking...\n"); }; void Sleep() { printf("i am sleepping...\n"); }; }; //具体产品 class Dog : public Animal { }; class Cat : public Animal { }; //抽象工厂 class AnimalFactory { public: virtual Animal createAnimal() = 0 ; }; //具体工厂 class CatFactory { public: Animal createAnimal() { return new Cat ; } }; class DogFactory: public AnimalFactory { public: Animal createAnimal() { return new Dog ; }; } //客户端,使用者 或者也叫做消费者代码 AnimalFactory *factory = new DogFactory ;//要换成“猫”,只需要修改这个工厂就ok了 Animal *dog = factory->createAnimal(); dog->Walk() ;
review
如果这个程序给我做的话,我能想到把Animal给抽象出来,也就是之前所说的简单工厂模式,这里是把创建Animal的工厂也给抽象了,这样就克服了简单工厂违背的“开放-封闭原则”因此也解决了简单工厂里超大的switch的问题,本身简单工厂里的switch就处理了多个产品,所以耦合很重,现在再也不用担心会把这个switch撑爆啦!
advantage
当引进新的产品时,不需要修改具体工厂方法降低了客户程序与产品间的耦合
当客户端更换对象时,不需要做大的改动(前提是已经有这个对象的工厂了)
disadvantage
每增加一类产品,就需要增加相应的产品工厂,增加了开发量使用场合
见背景里面的描述,当然希望下次能把这两个分开叙述Tips
下一章更新抽象工厂模式 PS: 这里不是已经有了抽象工厂吗,怎么还有一个抽象工厂模式?相关文章推荐
- GoF 23个经典的设计模式03--创建模式之工厂方法(未完代续)
- 设计模式--工厂方法
- 设计模式(三)、FACTORY METHOD(工厂方法)---对象创建型模式
- 设计模式学习笔记四:工厂方法(Factory Method)
- 每周一个设计模式之工厂方法与抽象工厂
- 设计模式之Factory1(简单工厂,工厂方法,抽象工厂的比较)
- 设计模式之工厂方法
- 设计模式 之 工厂方法
- C# 设计模式 之 工厂方法
- 设计模式(1)工厂方法 感觉没必要用工厂方法
- 设计模式杂谈:创建型模式之工厂方法(Factory Method)
- 设计模式--创建模式--工厂方法
- 设计模式示例一 Factory Method(工厂方法)
- 设计模式--工厂方法
- JAVA设计模式——工厂方法(Factory Method)模式
- 第二个设计模式:工厂方法
- 设计模式示例一 Factory Method(工厂方法)
- 设计模式 之 工厂方法
- 我把Black_Cat与Walaqi等关于"设计模式"之"工厂方法""抽象工厂"的讨论整理如下,以方
- 设计模式之工厂方法(FACTORY METHOD))(二)