首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Gof设计模式工厂模式(四)

定义 工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。...工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。...分类 简单工厂模式 工厂方法模式 抽象工厂模式(明天再单独讲) 简单工厂模式 实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类的实例。...简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。 工厂方法模式 工厂方法是粒度很小的设计模式,因为模式的表现只是一个抽象的方法。...缺点: 每次增加一个产品时,都需要增加一个具体类和对象实现工厂使得系统中类的个数成倍增加,所以对于简单对象来说,使用工厂模式反而增加了复杂度 结语 简单的设计模式讲解已经接近尾声,希望大家可以多回头看看历史文章

55180

Gof设计模式之静态工厂模式(五)

设计模式之静态工厂模式 01前言 该系列模式已经更新五篇,希望大家可以多看看以前的模式,并且从今天开始我打算换一种讲解方式,我不在贴出运行结果了,希望大家可以自己动手敲一下代码,然后我会在下一篇中更新上一篇的运行结果...02模式定义 当有多个抽象角色时使用的一种工厂模式。...抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品对象。...它有多个抽象产品类,每个抽象产品类可以派生出多个具体产品类,一个抽象工厂类,可以派生出多个具体工厂类,每个具体工厂类可以创建多个具体产品类的实例。 03适用场景 1, 一个对象拥有很多子类。...抽象工厂接口 ? 工厂具体实现类A ? 工厂具体实现类B ? 手机产品抽象产品接口 ? 手机产品具体实现类A(仿照手机产品实现类A仿写一个实现类B) ? 电脑产品抽象产品接口 ?

64460
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    GoF 23】篇2:工厂模式

    什么是工厂模式?...工厂模式满足OOP原则的: 开闭原则:对扩展开放,对修改关闭。 依赖倒置原则:面向接口编程,不要面向细节编程。 迪米特法则:间接通过朋友与朋友的朋友通信,不要直接与朋友的朋友通信。 2....为什么需要工厂模式? 回顾接口: 接口的概念: Java种的接口是一种特殊的抽象类,跟一般的抽象类相比,接口里的所有方法都是抽象方法,接口里面所有属性都是常量。...事实上,简单工厂能帮助我们真正的开始面向接口编程,像以前的做法,其实只是用到了接口的多态的部分,而最重要的“封装隔离性”并没有体现出来。 4. 工厂方法 工厂方法就是简单工厂中,构造器方法的写法。...,就需要修改工厂类中构造器的代码,这样就不满足开闭原则了(不了解开闭原则可以看一下我这篇文章【GoF 23】23种设计模式与OOP七大原则概述)。

    28610

    【Go实现】实践GoF的23种设计模式工厂方法模式

    上一篇:【Go实现】实践GoF的23种设计模式:建造者模式 简单的分布式应用系统(示例代码工程):https://github.com/ruanrunxue/Practice-Design-Pattern...两者在应用场景上稍有区别,建造者模式常用于需要传递多个参数来进行实例化的场景;工厂方法模式常用于不指定对象具体类型的情况下创建对象的场景。...工厂方法模式恰好就能满足这两点要求,下面我们通过它来完成代码的优化。...如果实例化的对象/接口涉及多种实现,可以使用工厂方法模式实现多态。...与其他模式的关联 很多同学容易将工厂方法模式和抽象工厂模式混淆,抽象工厂模式主要运用在实例化“产品族”的场景,可以看成是工厂方法模式的一种演进。

    30710

    GoF 23】篇2:工厂方法

    什么是工厂方法工厂方法类似简单工厂,只不过将对象实例化延迟到了子类来实现。 工厂方法定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使得一个类的实例化延迟到其子类。...定义创建对象类,一般为抽象类,该类就是工厂方法 //工厂方法,用于创建对象,但是不直接在这里创建,而是延迟到子类创建 public abstract calss ProductCreator { //...{ protected Product factoryMethod(){ return new ProductImpl();//创建Product实例 } } 从代码可以看出,我们并没有在工厂方法中直接创建对象...工厂类只是定义了一些功能,并没有提供具体的实现,正好满足抽象类的条件,因而常常定义为一个抽象类。 3. 适用场景 工厂方法是站在设计原则的角度来设计的。...(适用于架构师) 简单工厂是站在具体业务场景中设计的。(适用于编码者)

    15920

    GoF 23种经典的设计模式——抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种方式来创建一系列相关或依赖对象的家族,而无需指定具体的类。...在抽象工厂模式中,我们定义一个抽象工厂接口,该接口声明了一组用于创建不同产品对象的方法。每个具体工厂类都实现了抽象工厂接口,并负责创建特定的产品对象。...抽象工厂模式的参与者: 抽象工厂(Abstract Factory):定义了创建产品对象的接口,它包含一组创建不同产品的方法。...." << endl; } }; 接下来,我们定义抽象工厂类 AbstractFactory,它声明了创建两种怪物的抽象方法: class AbstractFactory { public:...现在,我们可以使用抽象工厂模式来创建不同等级的怪物实例。

    17710

    GOF23-创建型:简单工厂模式

    工厂模式之简单工厂 1.简单工厂模式 需求 看一个披萨的项目,要便于披萨种类的扩展,要便于维护 披萨的种类很多(比如 GreekPizz、CheesePizee等) 披萨的制作有prepare、bake...**思路:**把创建Pizza对象封装到一个类中,这样我们有新的Pizza种类时,只需要修改该 类就可,其它有创建到Pizza对象的代码就不需要修改了—-> 简单工厂模式 基本介绍 简单工厂模式是属于创建型模式...,是工厂模式的一种。...简单工厂模式是由一 个工厂对象决定创建出哪一种产品类的实例。...简单工厂模式工厂模式家族 中最简单实用的模式 简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码) 在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会 使用到工厂模式

    21230

    工厂模式——工厂方法模式

    工厂方法模式,咋一看在这个计算器程序里好像反而使程序变得更加“复制”,确实代码量好像是增加了,到底有什么好处呢?我想多领会领会,必然有它存在的理由。...我们先来看看“简单工厂模式”和“工厂方法模式”的类继承关系。上篇提到的“简单工厂模式”的类继承关系如下图所示: ? “工厂方法模式”的类继承关系如下图所示: ?...oper.setNumberB(2); System.out.println(oper.getResult()); } } 到现在,我们已经实现了工厂方法模式...,至于这两种工厂模式有什么区别,各自的优缺点是什么,我们在介绍了抽象工厂方法后再来做一个简单的总结。...多结合简单工厂模式,思考,为什么存在这两种模式,各自的意义又是什么。

    78970

    【Go实现】实践GoF的23种设计模式:抽象工厂模式

    上一篇:【Go实现】实践GoF的23种设计模式工厂方法模式 简单的分布式应用系统(示例代码工程):https://github.com/ruanrunxue/Practice-Design-Pattern...--Go-Implementation 简述 上一篇我们介绍了工厂方法模式,本文,我们继续介绍它的兄弟,抽象工厂模式(Abstract Factory Pattern)。...在工厂方法模式中,我们通过一个工厂方法接口来创建产品,而创建哪类产品,由具体的工厂对象来决定。抽象工厂模式工厂方法模式的功能很类似,只是把“产品”,变成了“产品族”。...与其他模式的关联 很多同学容易将工厂方法模式和抽象工厂模式混淆,工厂方法模式主要应用在单个产品的实例化场景;抽象工厂模式则应用在“产品族”的实例化场景,可以看成是工厂方法模式的一种演进。...参考 [1] 【Go实现】实践GoF的23种设计模式:SOLID原则, 元闰子 [2] 【Go实现】实践GoF的23种设计模式工厂方法模式, 元闰子 [3] Design Patterns, Chapter

    34930

    简单工厂模式工厂方法模式和抽象工厂模式

    KeyboardFactory,而非接口或者抽象类,getInstance()方法利用if-else创建并返回具体的键盘实例,如果增加新的键盘子类,键盘工厂的创建方法中就要增加新的if-else。...2、工厂方法 为了解决上面提到的"增加if-else"的问题,可以为每一个键盘子类建立一个对应的工厂子类,这些工厂子类实现同一个抽象工厂接口。这样,创建不同品牌的键盘,只需要实现不同的工厂子类。...3、抽象工厂 为了缩减工厂实现子类的数量,不必给每一个产品分配一个工厂类,可以将产品进行分组,每组中的不同产品由同一个工厂类的不同方法来创建。...实例化不同的工厂子类,可以通过不同的创建方法创建不同的产品 public class Main { public static void main(String[] args) {...总结: 简单工厂:唯一工厂类,一个产品抽象类,工厂类的创建方法依据入参判断并创建具体产品对象。工厂方法:多个工厂类,一个产品抽象类,利用多态创建不同的产品对象,避免了大量的if-else判断。

    28330

    设计模式-工厂模式(简单工厂工厂方法、抽象工厂

    文章目录 简单工厂 工厂方法 抽象工厂 简单工厂 ---- 简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一 个工厂对象决定创建出哪一种产品类的实例。...当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式。...由于创建实例的方法通常为静态(static)方法,因此简单工厂模式又被成为静态工厂方法模式(Static Factory Method)。...Factory表示工厂工厂根据需要来创建相应的产品。 这样一来,当添加新的产品C时,只需要修改工厂部分代码即可,而传统方法需要在每一个创建产品的地方都进行修改。...---- 不难发现当创建新的产品接口时,也需要对工厂方法修改,或创建多个工厂方法

    2K42

    Java设计模式工厂模式(简单工厂模式工厂方法模式,抽象工厂模式

    工厂模式出现的原因 在java中,创建一个对象最简单的方法就是使用new关键字。...方法,违背了java对扩展开放,对修改关闭的原则 二、工厂方法模式 需求:我不希望只有一个工厂来生产所有的宝马车,我希望每种宝马车都由其对应的工厂来生产 public abstract class BMW...工厂方法模式中,只有一个抽象产品类,每个工厂只能生产对应类型的产品实例 抽象工厂模式中,有多个抽象产品类,每个工厂可以生产多种类型的产品实例 总结 无论是哪种工厂模式,它们在形式和特点上都是相似的,他们的特点都是为了使产品和工厂解耦...在使用时不必在意具体是工厂方法模式还是抽象工厂模式,因为有时你会发现,明明使用的是工厂方法模式,当新需求来临,对代码稍加扩展或修改,加入一个新产品或方法后,由于产品构成了不同等级的产品族,就变成抽象工厂模式了...而在抽象工厂模式中,当减少一个产品或方法使得工厂提供的产品不再构成产品族后,它就演变成了工厂方法模式。 所以在使用工厂模式时,只需要关心是否降低了耦合度就ok了。

    63620

    JAVA设计模式工厂模式(简单工厂模式+工厂方法模式)

    GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)。...将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。 三、区别 工厂方法模式: 一个抽象产品类,可以派生出多个具体产品类。...工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。 四、简单工厂模式 建立一个工厂(一个函数或一个类方法)来制造新的对象。 分别说明例子:从无到有。...五、工厂方法模式 工厂方法模式去掉了简单工厂模式工厂方法的静态属性,使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担。...工厂方法模式组成: 1) 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。

    84320

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

    设计模式工厂模式-工厂方法模式 大家好,欢迎来到污污弹公司,今天司小司又接到了一个新活-披萨项目。...工厂方法模式: 定义了一个创建对象的抽象方法,由子类决定要实例化的类。从这句话中,我们可以知道,工厂方法模式是将对象的实例化(创建)推迟到子类中了。...工厂方法模式和简单工厂模式对比: 简单工厂模式: 根据类的标识,通过工厂对象就可以得到具体类的实例对象了。在工厂对象里面,类对象的实例化如下: 对象的实例化,是在工厂对象里面。...工厂方法模式: 是将对象的创建,抽取出来了。就是创建披萨的方法,抽取到一个具体的类中。...工厂方法模式通过一个抽象的工厂类来创建工厂,再由工厂通过一定的方法创造一定的对象,这样如果有新的产C出现不需要修改已有代码只要新建一个产品的从子类和工厂的子类就可以啦。

    41430

    工厂模式工厂方法简单工厂抽象工厂

    工厂模式分三类: 简单工厂 工厂方法 抽象工厂 简单工厂不属于设计模式,因为其违背了设计模式的开闭原则,后面会有介绍。 工厂方法 ?...public AbstractFactory { public: Car * createCar() { return new Aodi(); }; }; 这是一个比较标准的工厂方法设计模式...简单工厂 ? factory_simple.png 这是工厂模式的简单实现方式,包含元素 工厂类 抽象产品 抽象方法 示例 这里抽象产品和抽象方法和前面一样。...比如:当需要生产法拉利时,我们需要修改工厂类的方法。这不符合开闭原则,所以它不属于设计模式。只是工厂模式的一个变相简单的实现。 抽象工厂 前面说到工厂方法只能生产一个类型的产品。...当我们需要生产一系列的产品,比如:我们需要奥迪的发动机,那么肯定也是在奥迪的工厂生产,那么这里就可以使用抽象工厂设计模式 元素 抽象工厂 具体工厂 抽象产品(多个) 具体产品 示例 这里我们再Car的基础上在增加一个产品

    49510

    Java设计模式-工厂模式(2)工厂方法模式

    在Java设计模式-工厂模式(1)简单工厂模式 中我们介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而“工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品...地点: 湖南永州市蓝山县舜河村 作者:用心笑* Java设计模式-工厂模式(2)工厂方法模式 一、前言 1)概述: 2)角色结构: 3)类图关系: 二、代码实现 1)Coffce咖啡抽象类(产品抽象类...工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。首先完全实现‘开-闭 原则’,实现了可扩展。其次更复杂的层次结构,可以应用于产品结果复杂的场合。 工厂方法模式对简单工厂模式进行了抽象。...2)角色结构: 抽象工厂(Creator):是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。...工厂方法模式是简单工厂模式的进一步抽象。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。

    41720

    设计模式工厂模式!深入解析简单工厂模式工厂方法模式和抽象工厂模式

    方法,因此又称作是静态工厂方法模式 简单工厂模式的角色: 工厂类Factory : 简单工厂模式核心类....工厂方法模式让具体的类的实例化延迟到子类中进行 工厂方法模式的角色: 工厂类Factory: 工厂方法接口,通常返回一个抽象产品类型Product的实例对象 这个类是工厂方法模式的核心,与客户端程序无关...工厂方法模式是简单工厂模式的抽象和拓展,通过多态,工厂方法模式保持了简单工厂模式的优点,改善了简单工厂模式的缺点 工厂方法模式中,核心的工厂类仅仅给出具体工厂实现必须实现的接口,不再负责具体产品的创建,...,不需要指定具体的类 抽象工厂模式的基本思想: 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式工厂类的职责过大的问题.但是由于工厂方法模式中每个工厂只生产一类产品,这样可能会导致存在大量的工厂类的问题...抽象工厂模式的具体产品实现或者继承于不同的接口或者抽象类 工厂方法模式: 工厂方法模式是针对一个产品的等级结构 工厂方法模式的具体产品实现或者继承于同一个接口或者抽象类 抽象工厂模式的角色: 抽象工厂

    42520
    领券