抽象工厂模式

简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别

别等时光非礼了梦想. 提交于 2019-11-26 11:50:48
转载:原地址http://www.cnblogs.com/zhangchenliang/p/3700820.html 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别 结合简单示例和UML图,讲解工厂模式简单原理。 一、引子 话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰)、Bmw(宝马)、Audi(奥迪)),还雇了司机为他开车。不过,爆发户坐车时总是这样:上Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“开宝马车!”,坐上 Audi后他说“开奥迪车!”。 你一定说:这人有病!直接说开车不就行了?!而当把这个爆发户的行为放到我们程序语言中来,我们发现C语言一直是通过这种方式来坐车的! 幸运的是这种有病的现象在OO语言中可以避免了。下面以Java语言为基础来引入我们本文的主题:工厂模式! 二、简介 工厂模式主要是为创建对象提供了接口。工厂模式按照《Java与模式》中的提法分为三类: 1. 简单工厂模式(Simple Factory) 2. 工厂方法模式(Factory Method) 3. 抽象工厂模式(Abstract Factory) 这三种模式从上到下逐步抽象,并且更具一般性。还有一种分类法,就是将简单工厂模式看为工厂方法模式的一种特例,两个归为一类。两者皆可,这本为使用《Java与模式》的分类方法。 在什么样的情况下我们应该记得使用工厂模式呢

抽象工厂模式

风流意气都作罢 提交于 2019-11-26 00:16:23
抽象工厂(AbstractFactory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无需指定所要产品的具体类就能得到同族的不同等级的产品的模式结构 抽象工厂核心: 1:为同系列产品构造对象 2:绕开"new"来创建对象 class Factory: def create(self): return XXX() # 构造新对象 只需要"new"一个工厂出来 ,我就能生产很多XXX对象了 一组相关或相互依赖的对象 这说的是两个或多个对象之间存在相互依赖或相关的关系。比如在实现生活中对应笔:有笔盖、笔芯、笔筒,我买只新笔的时候应该得到的是个整只笔 而不是一部分。 无需指定所要产品的具体类就能得到同族的不同等级的产品 这里所说的就是“一系列”的意思。如我买钢笔你应该给我整只笔,而不是只给我笔盖或笔芯;或我买水笔你给我的应包含笔盖、笔芯、笔筒。 通用类图 实例 ''' 抽象工厂模式 例子:笔与笔盖 ''' import abc class AbsPen(abc.ABC): @abc.abstractmethod def write(self): pass class WaterPen(AbsPen): def write(self, s): return "水彩笔" class BallPen(AbsPen): def write(self): return

设计模式之抽象工厂模式

孤人 提交于 2019-11-25 21:07:39
抽象工厂模式(Abstract Factory),是23种设计模式之一。DP中是这么定义抽象工厂模式的: 抽象工厂模式(Abstract Factory),提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类。 在学习抽象工厂模式之前,最好熟悉简单工厂模式以及工厂方法模式,这样对理解抽象工厂模式会有一定帮助,而且抽象工厂也是基于工厂方法模式的。 至于工厂是用来干什么的,我这里也不过多介绍了,因为之前在工厂方法模式里已经说过了,如果对工厂的概念不是太清楚的话,可以参考我之前的文章: https://blog.51cto.com/zero01/2067822 在这里我们暂时先不谈论抽象工厂是什么,因为如果直接上来就去描述、解释什么是抽象工厂,以及如何使用抽象工厂模式来设计代码,这样是无法很好的明白抽象工厂模式的概念以及它所带来的好处或坏处的,只会让人下意识的只去记住实现代码,而不是设计模式的思想。讲解其他模式也是一样,如果一上来就是代码+理论一顿灌,只会让人看得亿脸懵逼或似懂非懂。这就好比给你一块披萨告诉你很好吃,以及这块披萨上用了哪些好食材,你只管吃就可以了,那么如果你没有吃过难吃的披萨,可能就会以为披萨就应该是这个味道的。 所以我们先从有些糟糕的代码入手,并且分析这些代码哪些地方有问题,然后再演进成使用设计模式去重构代码,这样就能有一个明显的对比