抽象工厂模式

设计模式-抽象工厂模式

偶尔善良 提交于 2019-12-01 16:36:54
1. 什么是抽象工厂    抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂 。 该超级工厂又称为其他工厂的工厂 。这种类型的设计模式 属于创建型模式 ,它提供了一种创建对象的最佳方式。    在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象 2. 优缺点   优点: 当一个产品族中的 多个对象被设计成一起工作时 ,它 能保证客户端始终只使用同一个产品族中的对象 。   缺点: 产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码 。 3.具体应用   1、QQ 换皮肤,一整套一起换。    2、生成不同操作系统的程序。 4.UML类图    来源: https://www.cnblogs.com/helloworldmybokeyuan/p/11693504.html

设计模式之美—抽象工厂模式

╄→гoц情女王★ 提交于 2019-12-01 12:45:02
抽象工厂模式   – 简单工厂模式 : 用来生产同一等级结构中的任意产品。(对于增加新的产品,需要修改已有代码)   – 工厂方法模式 : 用来生产同一等级结构中的固定产品。(支持增加任意产品)   – 抽象工厂模式 : 用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族) 抽象工厂的结构: 抽象工厂:提供创建产品的接口,可以创建多个不同等级的产品。 具体工厂:完成具体产品的创建。 抽象产品:定义产品规范,描述特性和功能。 具体产品:实现具体的产品。   抽象工厂: 1 public interface Make { 2 /** 3 * 造酒的接口,制造52度的酒 4 * @return Liqueur 5 */ 6 public Liqueur makeLiqueur52(); 7 8 /** 9 * 造酒的接口,制造42度的酒 10 * @return Liqueur 11 */ 12 public Liqueur makeLiqueur42(); 13 }   具体工厂:制造闷倒驴工厂 1 /** 2 * 制造闷倒驴工厂(代表闷倒驴这一族) 3 */ 4 public class MakeMdlFactory implements Make{ 5 6 /** 7 * 制造52度闷倒驴 8 * @return 52度闷倒驴味道 9 */ 10

设计模式-工厂方法模式

自古美人都是妖i 提交于 2019-12-01 10:34:58
工厂方法模式:又称工厂模式,也叫虚拟构造器模式或者多态工厂模式,属于类创建型模式。 在这个模式中,有4个角色 1.抽象工厂 在抽象工厂类中,声明了工厂方法,用于返回一个产品。是整个模式的 核心 ,它与应用程序无关。任何在模式中创建对象的工厂类都必须实现该接口。 2.具体工厂 是抽象工厂类的子类,实现了父类中的工厂方法。由客户调用,返回具体产品。 3.抽象产品 抽象产品是定义产品的接口,是所有产品的共同父类或者接口。 4.具体产品 实现抽象产品接口,由 专门 的具体工厂创建。 一个具体产品只能由某一个具体工厂创建,一一对应。 优点:用户只需要关心所需产品的工厂,无需知道其他细节,添加时不需要改动原来的代码,只需要增加具体工厂和具体产品类。也体现了缺点:每多一个具体产品,需要多写一个具体产品类和一个具体工厂类。 举例: 有抽象产品类 电视机,具体产品 海尔电视机和海信电视机。 有抽象工厂类 生产电视机制造厂,具体工厂 海尔制造厂和海信制造厂。 package factory; public abstract class TV{ public abstract void play(); }//TV作为抽象产品类,可以是接口或者抽象类。包含了所有产品都具有的业务方法play() TV.java package factory; public interface TVFactory{

设计模式之美学习(一):设计模式对编程工作者是很重要的,它的作用不言而喻。

强颜欢笑 提交于 2019-12-01 02:40:19
继数据结构与算法之美后,王争老师的专栏又开始更新了,这次是《设计模式之美》,希望学习之后会对自己有所提升。在此记录下自己的学习笔记,希望对自己或者看到的读者都有所裨益。 为什么每个程序员都要尽早地学习并掌握设计模式相关知识? 1. 应对面试中的设计模式相关问题 学习设计模式和算法一样,最功利、最直接的目的,可能就是应对面试了。 不管你是前端工程师、后端工程师,还是全栈工程师,在求职面试中,设计模式问题是被问得频率比较高的一类问题。特别是一些像 BAT 、 TMD 这样的大公司,比较重视候选人的基本功,经常会拿算法、设计模式之类的问题来考察候选人。 2. 告别写被人吐槽的烂代码 我们经常说, Talk is cheap,show me the code 。实际上,代码能力是一个程序员最基础的能力,是基本功,是展示一个程序员基础素养的最直接的衡量标准。你写的代码,实际上就是你名片。 3. 提高复杂代码的设计和开发能力 大部分工程师比较熟悉的都是编程语言、工具、框架这些东西,因为每天的工作就是在框架里根据业务需求,填充代码。实际上,这样的工作并不需要你具备很强的代码设计能力,只要单纯地能理解业务,翻译成代码就可以了。 但是,有一天, leader 让开发一个跟业务无关的比较通用的功能模块,面对这样稍微复杂的代码设计和开发,就发现会有点力不从心,不知从何下手了。因为只是完成功能、代码能用

设计模式之美学习(一):设计模式对编程工作者是很重要的,它的作用不言而喻。

十年热恋 提交于 2019-12-01 02:34:39
继数据结构与算法之美后,王争老师的专栏又开始更新了,这次是《设计模式之美》,希望学习之后会对自己有所提升。在此记录下自己的学习笔记,希望对自己或者看到的读者都有所裨益。 为什么每个程序员都要尽早地学习并掌握设计模式相关知识? 1. 应对面试中的设计模式相关问题 学习设计模式和算法一样,最功利、最直接的目的,可能就是应对面试了。 不管你是前端工程师、后端工程师,还是全栈工程师,在求职面试中,设计模式问题是被问得频率比较高的一类问题。特别是一些像 BAT 、 TMD 这样的大公司,比较重视候选人的基本功,经常会拿算法、设计模式之类的问题来考察候选人。 2. 告别写被人吐槽的烂代码 我们经常说, Talk is cheap,show me the code 。实际上,代码能力是一个程序员最基础的能力,是基本功,是展示一个程序员基础素养的最直接的衡量标准。你写的代码,实际上就是你名片。 3. 提高复杂代码的设计和开发能力 大部分工程师比较熟悉的都是编程语言、工具、框架这些东西,因为每天的工作就是在框架里根据业务需求,填充代码。实际上,这样的工作并不需要你具备很强的代码设计能力,只要单纯地能理解业务,翻译成代码就可以了。 但是,有一天, leader 让开发一个跟业务无关的比较通用的功能模块,面对这样稍微复杂的代码设计和开发,就发现会有点力不从心,不知从何下手了。因为只是完成功能、代码能用

设计模式小节

不想你离开。 提交于 2019-12-01 01:55:25
设计模式小节 模式总览 设计原则 开放-封闭原则(OCP/开-闭原则): 软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。 对于扩展是开放的,对于更改是封闭的。 作用:可维护、可扩展、可复用、灵活性好。 提示: 不可能完全封闭,必须先猜测出最优可能发生的变化种类,然后构造抽象来隔离那些变化 仅对程序中呈现出频繁变化的那些部分作出抽象。 面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。 里氏代换原则(LSP): 子类型必须能够替换掉他们的父类型。此时父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。 依赖倒转原则(DIP): 高层模块不应该依赖底层模块。两个都应该依赖抽象。 抽象不应该依赖细节。细节应该依赖抽象。 作用:由于子类型的可替换性才使得使用父类型的模块在无需修改的情况下可以扩展。 提示:面向对象的设计即程序中所有依赖关系都是终止于抽象类或者接口。 迪米特法则(LoD)/最少知识原则: 如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。 提示: 类之间的耦合越弱,越有利于复用 在类的结构设计上,每一个类都应当尽量降低成员的访问权限 强调了类之间的松耦合。 合成/聚合复用原则(CARP): 尽量使用合成/聚合,尽量不要使用类继承。

设计模式 - 工厂模式

孤者浪人 提交于 2019-11-30 18:07:45
概述 我们都知道 Java 中一共有 23 种设计模式,其中工厂模式分为三种,即:简单工厂模式(不在 23 种设计模式之列)、工厂方法模式和抽象工厂模式;我们平时说的工厂模式,其实大都指工厂方法模式,这种模式是我们平时编码中用的频率最高的一种,在 Spring 源码中就有很多工厂模式的应用,比如 BeanFactory 。 下面依次按照简单工厂模式、工厂方法模式、抽象工厂模式的顺序,依次由浅入深说说这三种模式;文章分别从定义、场景、优缺点也示例进行讲解。 简单工厂模式 定义 简单工厂模式(Simple Factory Pattern)是指由一个工厂对象决定创建出哪一种产品类的实例,简单来说就是, 定义一个工厂类,根据传入的参数不同返回不同的实例,被创建的实例具有共同的父类或接口。 场景 简单工厂适用于工厂类负责创建的对象较少的场景,且客户端只需要传入工厂类的参数,对于如何创建对象的逻辑不需要关心。总结一下就是: 需要创建的对象较少; 客户端不关心对象的创建过程; 优缺点 优点 实现了对责任的分割,提供了专门的工厂类用于创建对象 缺点 工厂类的职责相对过重,不易于扩展过于复杂的产品结构,不符合开闭原则(可解决) 示例 接下来我们构造一个场景来看看简单工厂模式的应用:现在手机更新换代的比较快,手机厂商每年基本都会在不同时间或者在同一时间发布生产不同型号和配置的手机。

浅谈abstractfactory抽象工厂模式

丶灬走出姿态 提交于 2019-11-30 13:04:47
一、前言 上次我们学习了Builder模式,用来组装复杂的实例,Builder就是我们盖房子的一块块砖头,钢筋和水泥,以及简单的用法,使用监工将这些元素有机的组合在了一起就能够建造整个建筑了,是监工将这些原材料按照一定的次序和特定的处理流程糅合在一起,这个过程就是组装。而现在我们学习了抽象工厂模式,将关键零件组装成产品。 在此之前,让我们对前面的几种模式做简单的回顾,首先我们学习了 迭代器模式 ,使用了工厂方法创造迭代器,并且完成了元素的内部实现和遍历的分离,因此成为“器”,也算是一种配合,其次我们学习了适配器,有类适配器和对象适配器,这两者只是实现的方式不同,本质是一样的,都是通过在原素材上加入一个适配器使得能够满足现在的需要,一般用在版本之间的兼容上使得新版本的内容能够在旧版本上使用(适配),以及一些复用的时候需要适当的修改(适配)的场合;之后我们学习了 模板模式和工厂模式 ,模板方法的一个特殊实现其实就是工厂方法,模板方法就是通过在父类之中定义职责,然后让子类实现各自的子任务,最后通过父类进行调用,提高了代码的可修改性和可扩展性,工厂方法则是在模板方法的基础上,通过生产产品的方式将框架的实现分离,遵循了高内聚低耦合的原则;在之后我们学习了 单例模式和原型模式 ,单例模式是保证全局关于某个类只有一个对象,在某些多线程或者编码误用的条件下非常重要,原型模式则是实现了对象的深浅拷贝

抽象工厂设计模式

不打扰是莪最后的温柔 提交于 2019-11-30 07:54:27
抽象工厂设计模式最大特点就是解耦。 //业务需求:生产不同内存条搭配Win7系统的电脑 //定义抽象工厂 public interface AbstastFactory { public Ram createRam(); public WinSystem createSys(); } //具体工厂实现 低端电脑配置 public class LowComputer implements AbstastFactory { @Override public Ram createRam() { return new Ram512(); } @Override public WinSystem createSys() { return new SystemWin7(); } } //具体工厂实现 高端电脑配置 public class NiceComputer implements AbstastFactory { @Override public Ram createRam() { return new Ram1G(); } @Override public WinSystem createSys() { return new SystemWin7(); } } //内存条接口 public interface Ram {} //512内存条实现类 public class Ram1G

八、Java设计模式之工厂方法

孤街醉人 提交于 2019-11-30 06:35:16
定义: 抽象工厂模式提供一个创建一系列相关或者相互依赖对象的接口 无需指定它们具体的类 类型:创建型 抽象工厂-适用场景: 客户端(应用层)不依赖于产品类实例如何被创建、实现等细节 强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量重复的代码 提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体实现 抽象工厂-优点: 具体产品在应用层代码隔离。无须关心创建细节 将一个系列的产品族统一到一起创建 抽象工厂-缺点: 规定了所有可能被创建的产品集合,产品族中扩展新的产品困难,需要修改抽象工厂的接口 增加了系统的抽象性和理解难度 注:相同颜色表示一个产品族,相同形状的为一个产品等级结构 来源: https://my.oschina.net/u/3915790/blog/3109396