`

Java设计模式篇(五)--工厂方法模式详解

阅读更多

一、工厂方法模式概述

工厂方法模式(英语:Factory method pattern)是一种实现了“工厂”概念的面向对象设计模式。就像其他创建型模式一样,它也是处理在不指定对象具体类型的情况下创建对象的问题。工厂方法模式是简单工厂模式的进一步抽象和推广。

 

二、简单工厂模式 VS 工厂方法模式

在篇三中,我们说过简单工厂模式。

简单工厂模式:将对象的创建放在了一个工厂类中,当需要新增一个分支时,就需要修改工厂类。根据开闭原则,简单工厂模式违反了此原则。

 

工厂方法模式:在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给工厂子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口,而不负责产品类被实例化这种细节,这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。

按照对象不同,分为不同的工厂,每一类对象都有一个自己对应的工厂产生,这些工厂之间使用同一接口方法关联,所以叫工厂方法模式。工厂方法模式将对象的创建过程放在工厂方法模式保持了简单工厂模式的优点,也克服了它的缺点。

但是,工厂方法模式也有缺点,那就是每新增一类对象,就需要增加一个生产对应对象的工厂类,增加了额外的工作量。当然,这个缺点可以克服,那就是使用反射,我们等下一次重构再说。

 

工厂方法模式的结构图如下:


 

三、工厂方法模式举例

我们还使用简单工厂模式中使用的内容,我们通过重构,看下他们的变化在哪。

我们先看下类图:

 

 

抽象工厂接口:

 

package com.zhaodf.pattern.factoryMethodPattern;

public interface OperationFactory{
    Operation createOperation(double numberA, double numberB);
}

加法工厂实现类:

 

 

package com.zhaodf.pattern.factoryMethodPattern;

public class AddFactory implements OperationFactory{
    public Operation createOperation(double numberA, double numberB) {
        return new AddOperation(numberA,numberB);
    }
}

 

 

减法工厂实现类:

 

package com.zhaodf.pattern.factoryMethodPattern;

public class SubFactory implements OperationFactory{
    public Operation createOperation(double numberA, double numberB) {
        return new SubOperation(numberA,numberB);
    }
}

 操作类统一抽象接口:

 

 

package com.zhaodf.pattern.factoryMethodPattern;

public interface Operation {

    double getResult();
}

 加法操作类实现:

 

 

package com.zhaodf.pattern.factoryMethodPattern;

public class AddOperation implements Operation {
    private double numberA;
    private double numberB;

    public AddOperation(double numberA, double numberB){
        this.numberA = numberA;
        this.numberB = numberB;
    }

    public double getResult() {
        return this.numberA+this.numberB;
    }

    public double getNumberA() {
        return numberA;
    }

    public void setNumberA(double numberA) {
        this.numberA = numberA;
    }

    public double getNumberB() {
        return numberB;
    }

    public void setNumberB(double numberB) {
        this.numberB = numberB;
    }
}

 减法操作类实现:

 

 

package com.zhaodf.pattern.factoryMethodPattern;

public class SubOperation implements Operation{
    private double numberA;
    private double numberB;

    public SubOperation(double numberA, double numberB){
        this.numberA = numberA;
        this.numberB = numberB;
    }

    public double getResult() {
        return this.numberA - this.numberB;
    }

    public double getNumberA() {
        return numberA;
    }

    public void setNumberA(double numberA) {
        this.numberA = numberA;
    }

    public double getNumberB() {
        return numberB;
    }

    public void setNumberB(double numberB) {
        this.numberB = numberB;
    }
}

 客户端调用代码:

 

 

package com.zhaodf.pattern.factoryMethodPattern;

public class TestOperation {
    public static void main(String[] args){
        double numberA = 1;
        double numberB = 2;
        OperationFactory operationFactory = new SubFactory();
        Operation op = operationFactory.createOperation(numberA,numberB);
        System.out.println(op.getResult());
    }
}

四、总结

 

         GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)。 将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。

工厂方法模式的结构角色:

  • 一个抽象产品类,可以派生出多个具体产品类,如我们的加、减操作类。   
  • 一个抽象工厂类,可以派生出多个具体工厂类,如我们的加法工厂类,减法工厂类
  • 每个具体工厂类只能创建一个具体产品类的实例,如加法工厂类只能创造加法类对象。

我们从例子中明白,工厂方法模式将简单工厂类中的工厂类的职能进行下沉,由对应的子工厂类去实现。但是不可否认的是,在客户端代码中,需要根据要求创建不同的工厂类,这也是工厂方式模式的一个缺点,后续我们讲到反射时,重新重构这里的代码。

 

  • 大小: 167.8 KB
  • 大小: 202.4 KB
分享到:
评论

相关推荐

    《Java设计模式》详解

    内容包括统一建模语言基础知识、面向对象设计原则、设计模式概述、简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式、适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、...

    java设计模式详解合集

    100多篇与设计模式学习相关的文章,涵盖了七个面向对象设计原则和24个设计模式(23个GoF设计模式 + 简单工厂模式)

    java种设计模式详解

    详细描述了java设计模式种23种模式,其中包括,创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、...

    Java设计模式——工厂设计模式详解

    主要介绍了Java设计模式——工厂设计模式详解,具有一定参考价值,需要的朋友可以了解下。

    Java 设计模式详解超详细(含示例代码)

    Java设计模式是软件开发中常见问题的标准解决方案,它们是经过时间考验和实践证明的有效设计方法。设计模式的目标是提高代码的可重用性、可维护性和可读性,同时减少设计和实现中的复杂性。 Java设计模式可以分为...

    Java设计模式之工厂模式实现方法详解

    主要介绍了Java设计模式之工厂模式实现方法,结合实例形式较为详细的分析了工厂模式的分类、原理、实现方法与相关注意事项,需要的朋友可以参考下

    java三种工厂模式文档+三个实例.rar

    java三种工厂模式文档+三个实例,里面有个word文档是学习文档 然后配套有三个项目学习

    java中级进阶高级23种设计模式详细介绍+代码详解PPT模板.pptx

    工厂模式 java中级进阶高级23种设计模式详细介绍+代码详解PPT模板全文共26页,当前为第3页。 抽象工厂模式 java中级进阶高级23种设计模式详细介绍+代码详解PPT模板全文共26页,当前为第4页。 建造模式 java中级进阶...

    java设计模式之工厂模式实例详解

    主要介绍了java设计模式之工厂模式,结合具有实例形式分析了java工厂模式的概念、原理、实现与使用方法,需要的朋友可以参考下

    Java 之23种设计模式解析

    创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:...

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

    创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模 式、享元模式。 行为型模式,共十一种...

    Java23种设计模式详解,看这一个就够了

    Java设计模式共有23种,分别为:抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式、桥接模式、组合模式、装饰模式、享元模式、代理模式、命令模式、解释器模式、访问者模式、迭代子...

    java设计模式之简单工厂模式详解

    主要介绍了java设计模式之简单工厂模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Java设计模式之抽象工厂模式实例详解

    主要介绍了Java设计模式之抽象工厂模式,结合实例形式分析了抽象工厂模式的概念、功能、定义与使用方法,需要的朋友可以参考下

    Java设计模式之静态工厂模式详解

    主要介绍了Java设计模式之静态工厂模式,简单说明了静态工厂模式的概念、原理、实现与使用方法,需要的朋友可以参考下

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    抽象工厂模式uml类图

    java设计模式 抽象工厂模式详解 一张图让你彻底明白抽象工厂模式

    java设计模式之工厂方法详解

    主要为大家详细介绍了java设计模式之工厂方法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    工厂方法模式

    java设计模式 工厂方法模式详解 史上最全的讲解 涵盖了所有的细节

    Java设计模式综合应用之密码管理器桌面离线版

    在该密码管理器的开发中,我们主要使用了创建型模式的工厂方法模式,结构型模式的装饰者模式,以及行为型模式的命令模式。程序绝对安全,加密流程及技术可靠。可以自己拿去用,就是有点丑。文件里有代码,类图,开发...

Global site tag (gtag.js) - Google Analytics