抽象工厂模式

设计模式:抽象工厂模式,结合类图秒懂!

匿名 (未验证) 提交于 2019-12-02 23:47:01
通过前篇文章 《设计模式:工厂模式,解除耦合的利器》 的介绍,我们对工厂模式有了深入的了解,今天继续介绍一种特殊的工厂模式,也就是抽象工厂模式。 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式,是工厂方法模式的升级版,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。 抽象工厂模式包含了几个角色: AbstractFactory:用于声明生成抽象产品的方法 ConcreteFactory:实现了抽象工厂声明的生成抽象产品的方法,生成一组具体产品,这些产品构成了一个产品族,每一个产品都位于某个产品等级结构中; AbstractProduct:为每种产品声明接口,在抽象产品中定义了产品的抽象业务方法; Product:定义具体工厂生产的具体产品对象,实现抽象产品接口中定义的业务方法。 这是它的通用类图: 其中 AbstractProductA 和 AbstractProductB 就是两个产品族的抽象类 (或者接口),而 Product1 和 Product2 就是产品族下的具体产品类,AbstractCreator 就是工厂的抽象。 我们可以用操作系统来举例,现在市面上用的最多的两种PC端操作系统是windows和Linux,两个系统都有共同类型的组件,如文件夹,按钮

07、工厂模式-抽象工厂模式

匿名 (未验证) 提交于 2019-12-02 23:43:01
2019独角兽企业重金招聘Python工程师标准>>> 先吐槽下,学习工厂模式时候,开始的时候都很恶心,但是反复的研究,明白后,并写出来后,才发现,真的值。 现在开始正式进入抽象工厂模式的学习和了解。 结合 工厂方法模式中所举的例子,为了更好的理解抽象工厂模式,我们把例子稍微调整下,不再以中国人外国人不能举例子,不是说不能用这个中国人外国人的例子,而是我发现有更好的例子。 我们换做汽车的例子来举例,首先 定义抽象类Car,然后用派生出子抽象类 ,SportCar,BusinessCar,分别是 跑车和商务 车,派生出来的子类还是抽象类,因为还有如下:SportBenzCar( 奔驰跑车 ),BusinessBenzCar( 奔驰商用 ),SportBuickCar,BusinessBuickCar( 此处需要想想,为什么抽象类Car的直接子类是SportCar和BusnessCar,然后这两个类的子类才是Benz和Buick,而不是Car的直接子类是BenzCar和BuickCar ),所以来吧,先把几个抽象类和具体实现类给搞定, 具体的类如下: 代码实现如下:(几个文件的内容全都放在一起了) //定义车抽象产品,用途只体现在多态,客户端用此定义产品对象,子类或者子类工厂类实例化 public abstract class Car { public abstract void

常用设计模式梗概

百般思念 提交于 2019-12-02 20:20:36
较为常用的设计模式有 工厂方法模式、单例模式、外观模式、观察者模式、代理模式、适配器模式等。 一、工厂方法(FactoryMethod)模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。 工厂方法模式的主要角色如下。 抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 newProduct() 来创建产品。 具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建。 抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。 具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。 二、单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误。 单例模式有 3 个特点: 单例类只有一个实例对象; 该单例对象必须由单例类自行创建; 单例类对外提供一个访问该单例的全局访问点; 三、外观(Facade)模式的定义

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

不问归期 提交于 2019-12-02 19:36:27
工厂方法模式中只考虑一类产品的生成,如畜牧场只养动物,而抽象工厂模式考虑多等级产品的实现 1,定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无需指定所需要产品的具体类就能得到同组的不同等级的产品的模式结构。它是工厂方法模式的升级。 使用抽象工厂方式要满足以下条件   系统中有多个产品族,每个具体工厂创建同一族但属于不同等级结构的产品   系统一次只能消费其中的某一族产品,即同族产品一起使用。 抽象工厂模式具有工厂方法模式的优点,还有其他优点   可以在类的内部对产品族中相关联的多等级产品共同管理,而不必引入多个新的类来进行管理   当增加一个新产品族时,不需要修改原代码,满足开闭原则 缺点   当增加一个新的产品时,所有的工厂类都需要修改   来源: https://www.cnblogs.com/javadongx/p/11760902.html

掌握设计模式之策略模式

↘锁芯ラ 提交于 2019-12-02 14:16:46
前言 最近段时间,接到一个需求:开发一个聚合支付服务,对其他内部项目提供统一的接口来实现不同支付平台的支付能力发起,比如支付宝,微信,银联等。为了处理相似的支付操作而各平台具体实现不同的情况,要让各个平台接口能力能相互独立,并要方便扩展后续新增的支付平台,我引入了设计模式的策略模式来应对需求场景,借此深入学习总结下策略模式,于是也就有了本文,希望对学习策略模式的同学有所帮助。 为什么需要策略模式 日常工作开发中我们总会遇到如下熟悉的代码片段: if(condition1){ // do something1 } else if (condition2){ // do something2 } else if (condition3){ // do something3 } 在每个 if 条件下都有数十行甚至百行的业务处理,各自处理又是相互独立的并且目的一致,都汇聚在一个方法里。这样的写法不但让类变得臃肿冗长,并且不同逻辑都在一个类中修改,维护和扩展起来都很费劲。那么又有什么办法可以优化这大段的代码呢,在实现功能的同时,让代码更加灵活和易维护。 要解决这个问题,本文的主角— 策略模式 就登场了,作为设计模式中比较简单的行为型模式,其实很多框架中都见到它的身影,稍后我们也会从各框架源码中识别策略模式的应用。使用策略模式可以帮助我们将每个处理逻辑封装成独立的类

设计模式

本小妞迷上赌 提交于 2019-12-02 06:19:48
设计模式 设计模式的简单理解 一、设计模式概念概述 1、设计模式的诞生 2、设计模式的定义以及分类 设计模式的定义 设计模式的基本要素 设计模式的分类 3、GoF设计模式简介设计模式的优点 二、设计模式面向对象定义原则 原则概述 单一职责原则 开闭原则 里氏代换原则 依赖倒转原则 接口隔离原则 合成复用原则 迪米特原则 三、工厂方法模式 1、工厂方法模式结构与实现 2、工厂模式应用实例 3、工厂方法的重载 4、工厂方法的隐匿 5、工厂方法模式的优缺点与适用环境 四、抽象工厂模式 1、抽象工厂模式结构与实现 2、抽象工厂模式应用实例 3、开闭原则的倾斜性 4、抽象工厂模式优缺点与适用环境 五、单例模式 单例模式结构与实现 单例模式应用实例 饿汉式单例与懒汉式单例 单例模式优缺点与适用环境 六、适配器模式 适配器模式结构与实现 适配器模式应用实例 适配器模式优缺点和适用环境 七、桥接模式 桥接模式结构与实例 桥接模式应用实例 桥接模式与适配器模式的联用 桥接模式优缺点与适用环境 八、组合模式 组合模式结构与实现 组合模式应用实例 透明组合模式与安全组合模式 组合模式优缺点和适用环境 九、装饰模式 装饰模式结构与实现 装饰模式应用实例 装饰模式优缺点与适用环境 十、观察者模式 观察者模式结构与实现 观察者模式应用实例 设计模式的简单理解 一、设计模式概念概述 1、设计模式的诞生 A

Java笔试面试-设计模式

。_饼干妹妹 提交于 2019-12-02 05:22:28
1.说一下设计模式?你都知道哪些? 答:设计模式总共有 23 种,总体来说可以分为三大类:创建型模式( Creational Patterns )、结构型模式( Structural Patterns )和行为型模式( Behavioral Patterns )。   ①创建型模式( Creational Patterns ): 工厂模式(Factory pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Patern) 创建者模式(Builder Pattern) 原型模式(Prototype Pattern)   ②结构型模式( Structural Patterns ): 适配器模式(Adapter Pattern) 桥接模式(Bridge Pattern) 过滤器模式(Filter Pattern) 组合模式(Composition Pattern) 装饰器模式(Decorator Pattern) 外观模式(Facade Pattern) 代理模式(Proxy Pattern) 享元模式(Flyweight Pattern)   ③行为型模式( Behavioral Patterns ): 访问者模式(Visitor Pattern) 模板模式(Template Pattern) 空对象模式(Null

JS面向对象编程

夙愿已清 提交于 2019-12-02 03:02:07
JavaScript 面向对象编程 面向对象介绍 什么是对象 Everything is object (万物皆对象) 对象到底是什么,我们可以从两次层次来理解。 (1) 对象是单个事物的抽象。 一本书、一辆汽车、一个人都可以是对象,一个数据库、一张网页、一个与远程服务器的连接也可以是对象。当实物被抽象成对象,实物之间的关系就变成了对象之间的关系,从而就可以模拟现实情况,针对对象进行编程。 (2) 对象是一个容器,封装了属性(property)和方法(method)。 属性是对象的状态,方法是对象的行为(完成某种任务)。比如,我们可以把动物抽象为animal对象,使用“属性”记录具体是那一种动物,使用“方法”表示动物的某种行为(奔跑、捕猎、休息等等)。 在实际开发中,对象是一个抽象的概念,可以将其简单理解为: 数据集或功能集 。 ECMAScript-262 把对象定义为: 无序属性的集合,其属性可以包含基本值、对象或者函数 。 严格来讲,这就相当于说对象是一组没有特定顺序的值。对象的每个属性或方法都有一个名字,而每个名字都映射到一个值。 提示:每个对象都是基于一个引用类型创建的,这些类型可以是系统内置的原生类型,也可以是开发人员自定义的类型。 什么是面向对象 面向对象不是新的东西,它只是过程式代码的一种高度封装,目的在于提高代码的开发效率和可维 护性。 面向对象编程 ——

工厂模式

荒凉一梦 提交于 2019-12-01 19:19:37
简单工厂模式是类的创建模式,又叫做静态工厂方法( Static Factory Method )模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。 工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。 工厂方法模式跟简单工厂模式在结构上的不同是很明显的,工厂方法模式的核心是一个抽象工厂类,而简单工厂模式的核心在一个具体类。显而易见工厂方法模式这种结构更好扩展,权力下发,分布式比集中式更具优势。 工厂方法模式和抽象工厂模式对比 工厂方法模式是一种极端情况的抽象工厂模式,而抽象工厂模式可以看成是工厂方法模式的推广。 工厂方法模式用来创建 一个 产品的等级结构,而抽象工厂模式是用来创建 多个 产品的等级结构。 工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个抽象产品类。 工厂方法模式中具体工厂类只有一个创建方法,而抽象工厂模式中具体工厂类有多个创建方法。 https://www.cnblogs.com/xiaoxi/category/1004551.html 来源: https://www.cnblogs.com/dingpeng9055/p/11714050.html

js面向对象

廉价感情. 提交于 2019-12-01 18:28:58
一. JavaScript面向对象前言 1.1 什么是对象? Everything is object (万物皆对象)。 对象到底是什么,我们可以从两个层次来理解。 对象的组成 方法(有归属)----函数(自由的) 属性(有归属)----变量(自由的) 1.对象是单个事物的抽象 一本书、一辆汽车、一个人都可以是对象,一个数据库、一张网页、一个与远程服务器的连接也可以是对象。当实物被抽象成对象,实物之间的关系就变成了对象之间的关系,从而就可以模拟现实情况,针对对象进行编程。 2.对象是一个容器,封装了属性(property)和方法(method) 属性是对象的状态,方法是对象的行为(完成某种任务)。比如,我们可以把动物抽象为animal对象,使用“属性”记录具体是那一种动物,使用“方法”表示动物的某种行为(奔跑、捕猎、休息等等) 在实际开发中,对象是一个抽象的概念,可以将其简单理解为 : 数据集或功能集。 1.2 什么是面向对象? 面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式。它使用先前建立的范例,包括模块化,多态和封装几种技术。今天,许多流行的编程语言(如Java,JavaScript,C#,C+ +,Python,PHP,Ruby和Objective-C)都支持面向对象编程(OOP)。 相对于「一个程序只是一些函数的集合,或简单的计算机指令列表。