抽象工厂模式

Spring中常见的设计模式——工厂模式

筅森魡賤 提交于 2019-12-05 19:59:20
一、简单工厂模式   简单工厂模式(Simple Factory Pattern)由一个工厂对象决定创建哪一种产品类的实例,简单工厂模式适用于工厂类负责创建对象较少的情况,且客户端只需要传入工厂类的参数,对于如何创建对象不关心。 public interface IBlog { //写随笔 public void write(); } public class JavaBlog implements IBlog { @Override public void write() { System.out.println("写java随笔"); } } public class WriteBlog { public static void main(String[] args) { IBlog blog = new JavaBlog(); blog.write(); } }   上述代码中,父类 IBlog 指向子类JavaBlog 的引用,应用层需要依赖JavaBlog,如果增加PythonBlog等等更多的课程,客户端就会越来越臃肿。因此要把依赖减弱,把创建细节隐藏。现在我们用简单工厂优化: public class BlogFactory { public IBlog create(Class<? extends IBlog> clazz) { if (null != clazz)

设计模式

谁都会走 提交于 2019-12-05 18:08:48
目录 一、创建型模式 1. 单例模式 1.1请手写一个单例 1.2单例模式的优点和应用? 1.3单例模式的缺点 2. 工厂类相关模式 2.1工厂模式、简单工厂模式、抽象工厂模式 2.2工厂模式的优点和应用 2.3工厂模式的不足 3、建造者模式 3.2建造者模式的优点和使用场景 3.3建造者模式的缺点 4、原型模式 4.1原型模式 4.2原型模式的优点和使用场景 4.3原型模式的缺点 二、结构类设计模式 1、适配器模式 1.1适配器模式 1.2适配器模式的优点和使用场景 2、桥接模式 2.1桥接模式 2.2桥梁模式的优点和应用场景 3、 装饰器模式 3.1对装饰器的理解 ,并写出一个计时器记录方法执行性能的装饰器? 3.2装饰器模式的优点和应用场景 3.3装饰器模式的缺点 4、组合模式 4.1组合模式 4.2组合模式的优点和使用场景 4.3组合模式的缺点 5、门面模式 5.1门面模式 5.3门面模式的缺点 6、享元模式 6.1享元模式 6.2享元模式的优点和使用场景 6.3享元模式的缺点 7、代理模式 7.1代理模式 7.2代理模式的优点和使用场景 7.3代理模式的缺点 三、行为类设计模式 1、策略模式 1.1策略模式 1.2策略模式的优点和应用场景 1.3策略模式的缺点 2、责任链模式 2.1责任链模式 2.2责任链模式的优点和应用场景 2.3责任链模式的缺点 3、 命令模式 3

抽象工厂模式

℡╲_俬逩灬. 提交于 2019-12-05 15:38:30
抽象工厂(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-12-05 13:58:53
抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。 抽象工厂模式也就是不仅生产鼠标,同时生产键盘。 也就是 PC 厂商是个父类,有生产鼠标,生产键盘两个接口。 戴尔工厂,惠普工厂继承它,可以分别生产戴尔鼠标+戴尔键盘,和惠普鼠标+惠普键盘。 创建工厂时,由戴尔工厂创建。 后续 工厂.生产鼠标()则生产戴尔鼠标, 工厂.生产键盘()则生产戴尔键盘。 1、为键盘和鼠标创建接口 1 public interface Keybo { 2 void sayHi(); 3 } Keybo 1 public interface Mouse { 2 void sayHi(); 3 } Mouse 2、实现接口的实体类 1 public class DellKeybo implements Keybo { 2 @Override 3 public void sayHi() { 4 System.out.println("Dellkeybo"); 5 } 6 } DellKeybo 1 public class HpKeybo

抽象工厂--设计模式

北城余情 提交于 2019-12-05 02:35:36
前面工厂方法模式中考虑的是一类产品的生产, 如畜牧场只管动物、电视机厂只产电视机等. 同种类称为同等级, 也就是说,工厂方法模式只会考虑生产同等级的产品,但是在现实生活中许多工厂都是综合性很强的,也会加大工厂的最大使用效率,能够生产出多等级的产品. 畜牧场可以养动物,也可以养植物等. 本篇博客将讲述抽象工厂方法模式.抽象工厂模式将考虑多等级的产品同时生产,将处于同一个具体工厂所生产的不同等级的产品作为一个产品族. 模式的定义与特点 定义 是一种为访问类创建一组相关或者相互依赖的接口,并且访问类不需要制定所要的产品的具体类就可以得到同族不同等级的产品模式结构. 抽象工厂模式一般都是工厂模式的升级, 工厂模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品. 特点 使用抽象工厂模式一般要满足如下条件. 系统中有许多个产品族,每个具体工厂创建统一族但又属于不同等级结构的产品. 抽象工厂有工厂模式的优点之外,还主要有以下优点: 可在类的内部对产品族中相关联的等级产品进行共同管理,并且不需要引入多个类来进行管理. 当增加一个产品族时,不需要更改原来的代码,满足了开闭原则. 抽象工厂缺点: 当产品族中需要增加新的产品时,所有的工厂类都需要更改 模式的结构和实现 抽象工厂和工厂方法一样,都是由抽象工厂、具体工厂、抽象产品和具体产品4个要素组成,但是抽象工厂中方法个数有所不同

JS面向对象

雨燕双飞 提交于 2019-12-04 18:21:27
一. JavaScript面向对象前言 1.1 什么是对象? Everything is object (万物皆对象)。 对象到底是什么,我们可以从两个层次来理解。 对象是单个事物的抽象 一本书、一辆汽车、一个人都可以是对象,一个数据库、一张网页、一个与远程服务器的连接也可以是对象。当实物被抽象成对象,实物之间的关系就变成了对象之间的关系,从而就可以模拟现实情况,针对对象进行编程。 对象是一个容器,封装了属性(property)和方法(method) 属性是对象的状态,方法是对象的行为(完成某种任务)。比如,我们可以把动物抽象为animal对象,使用“属性”记录具体是那一种动物,使用“方法”表示动物的某种行为(奔跑、捕猎、休息等等) 在实际开发中,对象是一个抽象的概念,可以将其简单理解为 : 数据集或功能集。 1.2 什么是面向对象? 面向对象只是过程式代码的一种高度封装,目的在于提高代码的开发效率和可维护性 小编的理解:面向对象就是说,使用对象的时候,你可以直接使用它所提供的功能而忽略其内部组成情况。面对对象不一定只有在编程界里才有,我们生活中无处不在;比如说,你家里的电视机,你使用了遥控,就能操作电视机,但是你实际上不知道这台电视机里面是什么零件组成的,你只要知道,我拿到遥控就可以操作电视机就好了。这就是一种面向对象的思想。 1.2.1 什么是面向对象编程? 面向对象编程 ——

简单工厂模式+泛型

雨燕双飞 提交于 2019-12-04 18:08:53
简单工厂模式 UML: 1.我们首先定义一个工厂模式的核心逻辑类:ProductFactoryClass, 2.然后抽象产品类:ProductClass1,ProductClass2 3.接口:IProduct 没啥好说的 直接贴代码吧: 1.外部调用时: 1 SimpleFactory<Product1> product = new SimpleFactory<Product1>(); 2 product.CreateShow().Product(20,200); 2.入口: 1 /// <summary> 2 /// 简单工厂 的实现层 3 /// </summary> 4 public class SimpleFactory<T> where T : new() 5 { 6 private static T _instance; 7 public T CreateShow() 8 { 9 if (_instance == null) 10 { 11 _instance = new T(); 12 } 13 return _instance; 14 } 15 } 3.抽象商品类: 1 public class Product1 : IProduct 2 { 3 public void Product(int count, double price) 4 { 5 Console

设计模式-----抽象工厂模式

三世轮回 提交于 2019-12-04 17:54:40
目录 抽象工厂模式 1. 模式动机 2. 模式定义 3. 模式结构 4. 时序图 5. 代码分析 6.优点 7. 缺点 8. 适用环境 9. 模式应用 10. 模式扩展 “开闭原则”的倾斜性 工厂模式的退化 11. 总结 抽象工厂模式 目录 1. 模式动机 在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法。但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。 为了更清晰地理解工厂方法模式,需要先引入两个概念: 产品等级结构 :产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机、海信电视机、TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体品牌的电视机是其子类。 产品族 :在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,如海尔电器工厂生产的海尔电视机、海尔电冰箱,海尔电视机位于电视机产品等级结构中,海尔电冰箱位于电冰箱产品等级结构中。 当系统所提供的工厂所需生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构中属于不同类型的具体产品时需要使用抽象工厂模式。 抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形态。

设计模式-----工厂方法模式

只愿长相守 提交于 2019-12-04 12:07:15
工厂方法模式 前言 在前面博主写的文章: 设计模式-----简单工厂模式 ,发现简单工厂模式存在一系列问题: 工厂类集中了所有实例(产品)的创建逻辑,一旦这个工厂不能正常工作,整个系统都会受到影响 违背“开放 - 关闭原则”,一旦添加新产品就不得不修改工厂类的逻辑,这样就会造成工厂逻辑过于复杂 简单工厂模式由于使用了静态工厂方法,静态方法不能被继承和重写,会造成工厂角色无法形成基于继承的等级结构 为了解决上述的问题,我们又使用了一种新的设计模式:工厂方法模式 1.介绍 1.1 定义 工厂方法模式,又称工厂模式、多态工厂模式和虚拟构造器模式,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象 1.2 主要作用 将类的实例化(具体产品的创建)延迟到工厂类的子类(具体工厂)中完成,即由子类来决定应该实例化(创建)哪一个类 1.3 解决的问题 工厂一旦需要生产新产品就需要修改工厂类的方法逻辑,违背了“开放 - 关闭原则 即简单工厂模式的缺点 之所以可以解决简单工厂的问题,是因为工厂方法模式把具体产品的创建推迟到工厂类的子类(具体工厂)中,此时工厂类不再负责所有产品的创建,而只是给出具体工厂必须实现的接口,这样工厂方法模式在添加新产品的时候就不修改工厂类逻辑而是添加新的工厂子类,符合开放封闭原则,克服了简单工厂模式中缺点 2.模式原理 2.1 UML类图 2.2 模式组成

《设计模式之禅》之抽象工厂模式

99封情书 提交于 2019-12-04 04:18:12
一、抽象工厂模式的定义 为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类。 二、抽象工厂模式的应用 1.抽象工厂模式的优点 封装性 ,每个产品的实现类不是高层模块要关心的,它要关心的是什么?是接口,是抽象,它不关心对象是如何创建出来的,这由谁负责呢?工厂类,只要知道工厂类是谁,我就能创建出一个需要的对象,省时省力,优秀设计就应该如此; 产品族内的约束为非公开状态 。例如生产男女比例的问题上,猜想女娲娘娘肯定有自己的打算,不能让女盛男衰,否则女性的优点不就体现不出来了吗?那在抽象工厂模式,就应该有这样的约束:每生产1个女性,就同时生产出1.2个男性,这样的生产过程对调用工厂类的高层模块来说是透明的,它不需要知道这个约束,我就是要一个黄色女性产品就可以,具体的产品族内的约束是在工厂内实现的; 2.抽象工厂模式的缺点 抽象工厂模式的最大缺点就产品族 扩展非常困难 ,为什么这么说呢?我们以通用代码为例,如果要增加一个产品C,也就是说产品家族由原来的2个增加到3个,抽象类AbstractCreator要增加一个方法createProductC(),然后两个实现类毒药修改,想想看,这严重违背了开闭原则,而且我们一直说明抽象类和接口是一个契约。改变契约,所有与契约有关系的代码都要修改,那么这段代码叫有毒代码,只要与这段代码有关系,就可能产生侵害的危险。 3