初识工厂设计模式
来源:互联网 发布:饥荒攻略秘籍软件 编辑:程序博客网 时间:2024/05/22 15:13
初识工厂设计模式
这篇文章是我拜读完许多高手博客之后所记录的笔记,意义在于自己总结,想了解更多可以点击这里
1、什么是工厂设计模式
根据搜索引擎,在面向对象程序设计中,工厂通常是一个用来创建其他对象的对象。工厂是构造方法的抽象,用来实现不同的分配方案。工厂对象通常包含一个或多个方法,用来创建这个工厂所能创建的各种类型的对象。这些方法可能接收参数,用来指定对象创建的方式,最后返回创建的对象。
2、工厂设计模式的实质
相当于把对象的创建的过程和细节交给工厂来决定,由工厂选择生成哪个子对象实例,把new一个对象和使用一个对象分割开来。
3、工厂设计模式的三个实现
简单工厂模式
将你要生成子对象的细节告诉工厂,由工厂来实现
public interface Product{}public class Washer implements Product{//body}public class Tv implements Product {//body}public class Factory {public static Product getProduct(String name){ if (name == null) return null; else{ switch (name){ case "Washer": return new Washer(); case "Tv": return new Tv(); default:return null; } }}}
简单工厂模式的优缺点很明显
理解: 简单工厂相当于是一个世界工厂,所有产品都是由这件工厂生产,一旦出问题,权限崩溃.
优点:简洁明了
缺点: 当你需要不断添加新产品或者产品数量很多时, 代码量和后序维护变得非常大.
工厂方法模式
为了解决这个方式,可以将一间工厂变成多间工厂,共同生产产品
public interface Product{}public class Washer implements Product{//body}public class Tv implements Product {//body}public interface FactoryMethod{public Product getProduct(){}}public class WasherFactory implements FactoryMethod{public Product getProduct(){ return new Washer();}}public class TvFactory implements FactoryMethod{public Product getProduct(){ return new Tv();}}
理解:工厂方法设计模式相当于发牌照或者开分店给若干工厂,让他们具有生成产品的资格
优点: 工厂方法把不同的产品放到了不同的工厂,如此一来只需要知道具体的工厂名就能够返回所需要的产 品,并且在增加新的产品时,只需要添加上新产品的具体类和对应具体工厂的实现即可,很好地解决了简单工厂模式的缺点
缺点:每增加一个新的产品,新的类就成对出现,一定程度上增加了系统的复杂度
抽象工厂模式
一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法。但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。
由此催生出抽象工厂模式,目的是==提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类==
当我们有多个 产品族 的时候,抽象工厂模式变得重要。
产品族:在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,如海尔电器工厂生产的海尔电视机、海尔电冰箱,海尔电视机位于电视机产品等级结构中,海尔电冰箱位于电冰箱产品等级结构中。
当我们 Washer 有Washer1和Washer2两种, 而Tv也有Tv1和Tv2两种。我们可以把Washer1和Tv1当作是由一间工厂所生出的两种产品,但是属于不同产品等级结构。 Washer2和Tv2同理。
于是有
public interface Washer{}public interface Tv{}public class Washer1 implements Washer{//body}public class Washer2 implements Washer{//body}public class Tv1 implements Tv{//body}public class Tv1 implements Tv{//body}public interface Factory(){public Washer getWasher(){}public Tv getTv(){}}public class Factory1 implements Factory{public Washer getWasher(){return new Washer1();}public Tv getTv(){return new Tv1();}}public class Factory2 implements Factory{public Washer getWasher(){return new Washer2();}public Tv getTv(){return new Tv2();}}
理解:把抽象工厂类理解为电器厂家标准,各个具体工厂类就是个个电器厂家,他们有各自不同的产品组
优点:增加新的具体工厂和产品族很方便,无须修改已有系统
缺点: 在添加新的产品对象时,需要在抽象工厂类(接口)中添加相应的方法,但是之前所定义的具体工厂类都没有新的产品方法,要修改需要巨大的工作。
因为还是初学者,所以当我有更深刻理解时,再来更新
参考并感谢博客:
http://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/simple_factory.html
https://www.cnblogs.com/zhouqiang/archive/2012/07/20/2601365.html
- 初识工厂设计模式
- 初识设计模式 chapter 04-工厂模式
- 黑马程序员:初识设计模式,简单工厂模式的计算器
- 初识简单工厂模式
- JAVA_初识工厂模式
- 简单工厂和工厂模式初识
- 设计模式--工厂设计
- 设计模式--初识设计模式
- 设计模式------工厂模式
- 设计模式------工厂模式
- 设计模式 [ 工厂模式 ]
- 设计模式--工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- 设计模式 工厂模式
- 设计模式-工厂模式
- 设计模式 -- 工厂模式
- 设计模式-工厂模式
- 并行加密算法系列(一)之AES单个加密模式的可并行性分析
- 自己搭建内网可用的Jrebel License Server激活Jrebel
- OpenCV2.4.13中同一函数不同形参的理解,vector,list区别,findContours理解
- SQL
- deeplearning.ai-lecture2-week1-Initialization-homework
- 初识工厂设计模式
- (File类文件移植)
- JNI生成.h文件无法确定类的签名
- 分答项目_技能点:删除多条分类信息
- tensorflow报错:Couldn't open CUDA library libcupti.so.8.0. LD_LIBRARY_PATH
- auto-sklearn案例解析一
- 面向容器
- JavaScript 专属卫衣
- 深圳外汇CRM客户管理系统源代码