抽象工厂模式

python-工厂方法模式

核能气质少年 提交于 2020-03-22 05:11:32
源码地址: https://github.com/weilanhanf/PythonDesignPatterns 简单工厂模式的不足: 在简单工厂模式中,只提供了一个工厂类,该工厂类处于对产品类进行实例化的中心位置,它知道每一个产品对象的创建细节,并决定何时实例化哪一个产品类。简单工厂模式最大的缺点是当有新产品要加入到系统中时,必须修改工厂类,加入必要的处理逻辑,这违背了“开闭原则”。在简单工厂模式中,所有的产品都是由同一个工厂创建,工厂类职责较重,业务逻辑较为复杂,具体产品与工厂类之间的耦合度高,严重影响了系统的灵活性和扩展性,而工厂方法模式则可以很好地解决这一问题。 说明: 工厂方法模式: 定义一个用于创建对象的接口,但是让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。 工厂方法模式就是简单工厂模式的进一步抽像。由于面向对象多态性,工厂方法模式保持了简单工厂的有点同时克服了他的缺点。工厂方法模式中,核心的工厂被提升为一个抽象类,将具体的创建工作交给他的子类完成。这个抽象的工厂类仅规定具体工厂实现的接口,而不明确指出如何实例化一个产品类,这使得工厂方法模式允许系统在不修改原有产品结构的情况下轻松的引进新产品。 抽象工厂模式: 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。 抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形式

创建型模式之抽象工厂模式

谁说胖子不能爱 提交于 2020-03-21 13:28:41
3 月,跳不动了?>>> 1 概述 上一篇文章 讲到了 工厂方法模式 ,它提供了一种在不指定具体实现的情况下,创建类实例的解决方案。那为什么还需要 抽象工厂模式 呢? 2 抽象工厂模式 抽象工厂模式 本质上,也是定义一个工厂,用来作为类创建的入口,拥有 工厂方法模式 的优点:如隐藏类的构造细节,降低类的使用复杂度,与调用者解耦等等。 而它与 工厂方法模式 最大的区别在于, 抽象工厂模式 更强调创建 一族 的元素。比如对于不同的浏览器,有不同的按钮,选择框和输入框。那么我们可以定义一个浏览器的接口,并创建浏览器工厂 ChromeFactory , FirefoxFactory 。其中 ChromeFactory 可以创建 Chrome 一族的按钮,选择框, FirefoxFactory 可以创建 Firefox 一族的按钮选择框,从而实现同一族元素的高内聚,提高程序的灵活性和可扩展性。 3 案例 再看一个简单的例子。有一个汽车工厂,可以生产轿车和SUV。 interface CarFactory { Car getCar(); SUV getSUV(); } interface Car { void getSize(); } interface SUV { void getSize(); } 按类别,工厂又可以分为美国工厂和日本工厂。而日本工厂只能生产日本车,美国工厂只能生产美国车

工厂模式——我有不止一个对象

二次信任 提交于 2020-03-19 14:58:12
3 月,跳不动了?>>> 3年工作经验是吧? 你知道工厂模式分为几类吗?他们都有什么区别? 那你说说你们项目中是怎么使用工厂模式的? 带着问题,尤其是面试问题的学习才是最高效的。加油,奥利给! 文章收录在 GitHub JavaEgg ,N线互联网开发必备技能兵器谱 工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 工厂模式可以分为三类: 简单工厂模式(Simple Factory) 工厂方法模式(Factory Method) 抽象工厂模式(Abstract Factory) 简单工厂其实不是一个标准的的设计模式。GOF 23种设计模式中只有「工厂方法模式」与「抽象工厂模式」。简单工厂模式可以看为工厂方法模式的一种特例,为了统一整理学习,就都归为工厂模式。 这三种工厂模式在设计模式的分类中都属于 创建型模式 ,三种模式从上到下逐步抽象。 创建型模式 创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节

PHP 工厂模式

你离开我真会死。 提交于 2020-03-13 11:12:58
(一个创造者、一个产品,将类的实例化和对象的使用分离开,这就是工厂模式的思想) 工厂模式的确是让初学者比较费解的模式。 首先它有简单工厂和抽象工厂之分。但真正算得上设计模式的,是抽象工厂。而简单工厂说实在的仅仅是比较自然的再封装。所以很多教科书会显摆自己的内涵大幅度的介绍抽象工厂,而有意无意的忽略了简单工厂。 实际的情况又正好相反,简单工厂几乎每个人都会用得上,抽象工厂大部分人一辈子都用不上一次。 下面回答你的问题:简单工厂封装了new到底有啥好处? 在实际的项目中,在你通往架构师的道路上,你要培养出一种感觉:要new一个实体对象是件很谨慎的事情(不是指值对象),不要随便new。最好不要自己new,让别人去new,传给你去调用。这样new错了也是别人的事,换而言之你的模块是好质量的,禁得起推敲的。那么都不愿意去new,谁去new?让专门的一个工厂去new。请注意:这仅仅是解决new的方式之一,此外还要反射啊等等。那你必须要等到真正接触大型项目才能有体味的。 作者:余叶 链接: https://www.zhihu.com/question/24843188/answer/49197026 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 1.隐藏具体类名,很多类隐藏得很深的,而且可能会在后续版本换掉 2.避免你辛苦的准备构造方法的参数 3

创建型模式之抽象工厂模式

喜你入骨 提交于 2020-03-12 20:43:22
重要程度:5星 3.1. 模式动机 在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法。但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。 为了更清晰地理解工厂方法模式,需要先引入两个概念: 产品等级结构 :产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机、海信电视机、TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体品牌的电视机是其子类。 产品族 :在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,如海尔电器工厂生产的海尔电视机、海尔电冰箱,海尔电视机位于电视机产品等级结构中,海尔电冰箱位于电冰箱产品等级结构中。 当系统所提供的工厂所需生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构中属于不同类型的具体产品时需要使用抽象工厂模式。 抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形态。 抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则需要面对多个产品等级结构,一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建

抽象工厂模式

跟風遠走 提交于 2020-03-08 11:59:35
抽象工厂(Abstract Factory Design Pattern)是一种创建型的模式,和工厂方法类似,不过抽象工厂不只创建单一品类的产品,而是可以将产品族封装起来,创建多重产品。我们可以看一下下面的这个UML类图。 抽象工厂 定义了创建产品的接口 具体工厂 来实现具体的产品创建的行为逻辑 接下来我们来看一下代码: 抽象产品接口: Phone public interface Phone { String getName(); } Pad public interface Pad { String getName(); } 具体的产品类: 小米系列 public class MiPhone implements Phone { @Override public String getName() { return "小米"; } } public class MiPad implements Pad{ @Override public String getName() { return "MiPad"; } } 华为系列 public class HuaweiPhone implements Phone{ @Override public String getName() { return "华为"; } } public class HuaweiPad implements

工厂方法模式

南笙酒味 提交于 2020-03-07 03:03:16
目录 概念 实现原理 解决的问题 作用和意义 角色构成 抽象工厂(Creator)角色 具体工厂(Concrete Creator)角色 抽象产品(Product)角色 具体产品(Concrete Product)角色 UML类图 代码实现 抽象工厂 IPressFactory.java 具体工厂 HarvardPressFactory.java OxfordPressFactory.java 抽象产品 IBook.java 具体产品 HongLouBook.java SanGuoBook.java 客户端调用 FactoryMethodFirstDemo.java 工厂方法模式-控制台输出 概念 工厂方法模式,又称工厂模式、多态工厂模式和虚拟构造器模式,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。 实现原理 工厂方法模式对简单工厂模式进行了抽象。有一个抽象的Factory类(可以是抽象类和接口),这个类将不再负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品。 解决的问题 工厂方法模式是简单工厂模式的衍生或者说改进,解决了简单工厂模式存在的问题,友好地遵循了开闭原则,实现了可扩展

C++常用设计模式之:抽象工厂

无人久伴 提交于 2020-03-07 00:12:07
抽象工厂同样是一种常见的创建型模式,它也是用于解决程序中创建对象使用new而产生的紧耦合的问题。那它与之前说到的工厂方法有什么不同呢? 工厂方法创建的是一个单一的对象 , 而使用 抽象工厂可以创建 一系列 对象。 抽象工厂的定义:可以提供向使用者一个接口,这个接口可以创建一系列具有相关性的对象。 结合之前说的工厂方法我们来看看现实中的例子:还是以家电为例,在工厂方法中我们得到了一个具体品牌的家电,在实际生活中某个具体的家电品牌旗下有很多不同的电器,像洗衣机、空调、冰箱等等好几十种。如果还是用工厂方法来解决,也不是不行,那就先为不同的品牌建立不同的工厂,再为不同的电器建立不同的工厂呗,这下工厂可就多了去了........这个时候就该抽象工厂闪亮登场了,噔噔噔...它就是为了解决这样一系列对象(同一个品牌下的不同电器)而生的。那么我们再仔细想一下,是不是工厂方法就是一种特殊的抽象工厂呢,当这一系列对象简化为一个对象时,抽象工厂就变成了工厂方法了。 UML结构图如下: 下面我用伪码来表述上面的例子。 //这里我们为每一种电器创建一个基类,里面具体的内容我就不写了,知道它们是抽象基类就行了 class Washing {...}; //洗衣机 class AirConditioner {...};//空调 class Fridge {...};//冰箱 /

设计模式之:工厂方法模式

筅森魡賤 提交于 2020-03-03 19:35:45
模式的定义与特点 工厂方法(FactoryMethod)模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。 我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫“简单工厂模式”,它不属于 GoF 的 23 种经典 设计模式 ,它的缺点是增加新产品时会违背“开闭原则”。 本节介绍的“工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则。 工厂方法模式的主要优点有: 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程; 在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则; 其缺点是:每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度。 模式的结构与实现 工厂方法模式由抽象工厂、具体工厂、抽象产品和具体产品等4个要素构成。本节来分析其基本结构和实现方法。 1. 模式的结构 工厂方法模式的主要角色如下。 抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 newProduct() 来创建产品。 具体工厂

抽象工厂模式(工具模式)

╄→尐↘猪︶ㄣ 提交于 2020-03-03 08:04:17
工厂方法模式只有一个或者一组重载的工厂方法(一个工厂对应一个具体的产品,大大增加系统开销) 抽象工厂模式:一个工厂生产一些系列产品。比如生产水果的工厂可以生产苹果,也可以生产梨 产品族:在抽象工厂模式中,产品族是指同一个工厂生产的,位于不同产品等级结构中的一组产品 抽象工厂模式包含的角色:抽象产品,具体产品,抽象工厂,具体工厂 典型利用抽象工厂的就是对数据库的链接(SQL SERVER和MY SQL) 来源: CSDN 作者: GodGump 链接: https://blog.csdn.net/GodGump/article/details/104608048