工厂方法模式

工厂方法模式

痴心易碎 提交于 2020-03-04 21:16:44
工厂方法模式(Factory Method Pattern)是比简单工厂要更加抽象,更容易扩展的『工厂』模式,工厂方法定义了一个创建对象的接口,但是并不具体去处理创建对象的事情,而是通过实现此创建对象接口的类来创建对象。 我们来举个例子看一下,UML图如下所示: Phone 是抽象的手机类, Mi 、 Huawei 、 Oppo 是具体的手机。 有一个生产手机的工厂接口 PhoneFactory ,然后有三个实现了这个借口的具体工厂类: MiPhoneFactory HuaweiPhoneFactory OppoPhoneFactory 下面看具体的代码: 抽象Phone public abstract class Phone { ​ protected String name ; ​ public Phone ( String name ) { this . name = name ; } ​ public String getName () { return this . name ; } } 小米手机类: Mi public class Mi extends Phone { public Mi ( String name ) { super ( name ); } } 华为手机类: Huawei public class HuaWei extends Phone {

设计模式-工厂方法模式

▼魔方 西西 提交于 2020-03-04 03:35:07
工厂方法模式结构图 意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 其中: Product定义工厂方法所创建的对象的接口。 ConcreteProduct实现Product接口 Create声明工厂方法,该方法返回一个Product类型的对象。Create也可以定义一个工厂方法的默认实现,它返回一个默认的ConcreteProduct对象,可以调用工厂方法以创建一个Product对象。 ConcreteCreator重定义工厂方法以返回一个ConcreteProduct实例。 应用举例 #include <iostream> using namespace std; //抽象产品 class Product { }; //具体产品A class ConcreteProductA : public Product { }; //具体产品B class ConcreteProductB : public Product { }; //抽象工厂 class Creator { public: virtual Product *CreateProduct() = 0; }; //具体工厂A,只生产A产品 class ConcreteCreatorA : public Creator { public: virtual Product

设计模式之:工厂方法模式

筅森魡賤 提交于 2020-03-03 19:35:45
模式的定义与特点 工厂方法(FactoryMethod)模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。 我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫“简单工厂模式”,它不属于 GoF 的 23 种经典 设计模式 ,它的缺点是增加新产品时会违背“开闭原则”。 本节介绍的“工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则。 工厂方法模式的主要优点有: 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程; 在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则; 其缺点是:每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度。 模式的结构与实现 工厂方法模式由抽象工厂、具体工厂、抽象产品和具体产品等4个要素构成。本节来分析其基本结构和实现方法。 1. 模式的结构 工厂方法模式的主要角色如下。 抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 newProduct() 来创建产品。 具体工厂

设计模式——工厂方法模式(批量生产不同对象方法)

安稳与你 提交于 2020-02-24 04:27:06
设计模式——工厂模式 工厂方法模式 : 定义 :工厂模式定义创建对象的接口,但是让子类去真正的实例化。也就是工厂方法将类的实例化延迟到了子类; 缺点 :该方法比简单工厂模式复杂,引入了抽抽象层(空的),还有子工厂; 优点 : 但是相比于简单工厂模式,代码的 维护性和扩展性提高 了,新增产品时,只需要在抽象成原型上增加该子工厂类即可,不需要修改抽象工厂类和其他子工厂;更符合面向对象的开闭原则; 下面一个demo:了解工厂方法模式的便捷之处; //引入一个抽象层:PlaneFactory function PlaneFactory ( ) { } //公共接口:所有的子类实例化的对象都可以使用该接口;(新增接口时,只需在原型上增加方法即可); PlaneFactory . prototype . touch = function ( ) { console . log ( 'die' ) ; } //子类工厂:都定义在原型上;(新增产品时只需在原型上增加方法(子工厂)即可) PlaneFactory . prototype . SmallPlane = function ( ) { this . name = 'SmallPlane' ; this . width = 100 ; this . height = 100 ; this . blood = 100 ; }

工厂设计模式

99封情书 提交于 2020-02-17 18:32:13
简单工厂模式:   简单工厂模式又叫做静态工厂(Static Factory)模式,但不属于23种GOF设计模式之一。简单工厂模式是根据传入的参数决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单但最实用的模式。 下面以生产车的工厂案例来展示简单工厂模式: //抽象产品类 public interface Car { void run(); } //具体产品类 public class Audi implements Car { @Override public void run() { System.out.println("奥迪runing"); } } //具体产品类 public class Byd implements Car { @Override public void run() { System.out.println("比亚迪runing"); } } //生产车的工厂类 public class CarFactory { public static Car createCar(String type) { if("奥迪".equals(type)) { return new Audi(); }else if ("比亚迪".equals(type)) { return new Byd(); }else { return null; } } } /

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

给你一囗甜甜゛ 提交于 2020-02-15 01:11:28
一、工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。 工厂模式在《Java与模式》中分为三类: 1)简单工厂模式(Simple Factory):不利于产生系列产品; 2)工厂方法模式(Factory Method):又称为多形性工厂; 3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品; 这三种模式从上到下逐步抽象,并且更具一般性。 GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)。将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。 二、简单工厂模式 简单工厂模式又称 静态工厂方法模式 。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。 在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化, 如同一个交通警察站在来往的车辆流中,决定放行那一个方向的车辆向那一个方向流动一样。 先来看看它的组成: 1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。 2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口

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

孤人 提交于 2020-02-14 19:17:37
一、工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。 工厂模式在《Java与模式》中分为三类: 1)简单工厂模式(Simple Factory):不利于产生系列产品; 2)工厂方法模式(Factory Method):又称为多形性工厂; 3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品; 这三种模式从上到下逐步抽象,并且更具一般性。 GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)。将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。 二、简单工厂模式 简单工厂模式又称 静态工厂方法模式 。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。 在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化, 如同一个交通警察站在来往的车辆流中,决定放行那一个方向的车辆向那一个方向流动一样。 先来看看它的组成: 1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。 2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口

设计模式-工厂三姐妹

陌路散爱 提交于 2020-02-14 00:12:17
首先明确什么是工厂模式: (1) 可以使代码结构清晰,有效地封装变化。在编程中,产品类的实例化有时候是比较复杂和多变的,通过工厂模式,将产品的实例化封装起来,使得调用者根本无需关心产品的实例化过程,只需依赖工厂即可得到自己想要的产品。 (2) 对调用者屏蔽具体的产品类。如果使用工厂模式,调用者只关心产品的接口就可以了,至于具体的实现,调用者根本无需关心。即使变更了具体的实现,对调用者来说没有任何影响。 (3) 降低耦合度。产品类的实例化通常来说是很复杂的,它需要依赖很多的类,而这些类对于调用者来说根本无需知道,如果使用了工厂方法,我们需要做的仅仅是实例化好产品类,然后交给调用者使用。对调用者来说,产品所依赖的类都是透明的。 而且,工厂模式可以分为简单工厂模式、工厂方法模式、抽象工厂模式。下面是对这三种工厂模式的对比和分析。 【简单工厂模式】 1.概念: 从设计模式的类型上来说,简单工厂模式 是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GDF 设计模式之一。简单工厂 模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。简单的说, 简单工厂模式更多的使用了面向对象编程中的多态性,基类的引用可以指向派生类,并且调用派生的方法,即多态性。 2.如图所示

Java开发中的23种设计模式详解

廉价感情. 提交于 2020-02-11 17:19:17
一、设计模式的分类 总体来说设计模式分为三大类: 1. 创建型模式 共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2. 结构型模式 共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 3. 行为型模式 共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 4. 其它 并发型模式和线程池模式。用一个图片来整体描述一下: 回到顶部 二、设计模式的原则(先不看) 1、开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。 2、里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为

结合案例写出工厂方法模式实例

允我心安 提交于 2020-02-10 04:47:21
一、基本概念 工厂方法模式是类的创建模式,又叫做虚拟构造子(Virtual Constructor)模式或者多态性工厂(Polymorphic Factory)模式。 工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。 或者说引入工厂模式的目的就是我们需要多个工厂,但是每个工厂内部又要划分情况,如果只用一个工厂的话,会产生多种复合的情况。 比如说我们有两个工厂,每个工厂有3种情况,如果用简单工厂模式,要分为 3 * 2 = 6 种情况,所以可以用工厂方法模式解决。 二、结构 在简单工厂中,创建对象的是另一个类,而在工厂方法中,是由大工厂的子类(或者实现类)来创建对象。 即上面有一个大工厂,下面是分类的工厂。 三、案例 案例,模拟需要生成中国食物A,中国食物B,美国食物A,美国食物B。 代码逻辑结构图: 基本结构图: 先给出这些食物( Product ): public interface Food { } public class AmericanFoodA implements Food { } public class AmericanFoodB implements Food { } public class ChineseFoodA implements Food { } public class ChineseFoodB implements