一、工厂方法模式概述
工厂方法模式(英语: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)看为工厂方法模式的一种特例,两者归为一类。
工厂方法模式的结构角色:
- 一个抽象产品类,可以派生出多个具体产品类,如我们的加、减操作类。
- 一个抽象工厂类,可以派生出多个具体工厂类,如我们的加法工厂类,减法工厂类
- 每个具体工厂类只能创建一个具体产品类的实例,如加法工厂类只能创造加法类对象。
我们从例子中明白,工厂方法模式将简单工厂类中的工厂类的职能进行下沉,由对应的子工厂类去实现。但是不可否认的是,在客户端代码中,需要根据要求创建不同的工厂类,这也是工厂方式模式的一个缺点,后续我们讲到反射时,重新重构这里的代码。
相关推荐
Java设计模式通常分为三类:创建型模式、结构型模式和行为型模式。 #### 1.1 创建型模式 创建型模式关注的是对象的创建机制,确保系统在合适的时间创建合适的对象。 ##### 1.1.1 工厂方法模式 **定义**:定义一...
Java设计模式是一种在特定场景下解决软件设计问题的方法论。设计模式能够帮助开发者以一种更加系统化、标准化的方式来构建软件系统,提高软件的可维护性和可扩展性。本文档通过图解和代码示例的方式详细介绍了23种...
### Java设计模式详解 #### 创建型模式 **1.1 工厂方法(Factory Method)** 工厂方法模式定义了一个创建对象的接口,但允许子类决定实例化哪一个类。这使得一个类的实例化可以被推迟到其子类。这种模式在以下...
下面,我们将深入探讨几个重要的Java设计模式。 1. 单例模式:单例模式确保一个类只有一个实例,并提供全局访问点。在Java中,有多种实现单例的方法,如饿汉式(静态常量)、懒汉式(线程不安全)、双重检查锁定...
Java设计模式详解合集是一份宝贵的资源,包含了丰富的面向对象设计原则和多种设计模式的深入讲解。这份资料旨在帮助开发者提升软件设计能力,遵循良好的编程实践,提高代码的可读性、可维护性和复用性。以下是其中...
Java设计模式-建造者模式详解 Java设计模式-建造者模式详解将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式(Builder)是使用多个“小型”工厂来最终创建出一个完整对象。...
Java设计模式是软件开发中的一种最佳实践,它总结了在解决特定问题时程序员们经常采用的有效方法。这个“JAVA设计模式-chm版”资源显然包含了关于Java设计模式的详细信息,便于理解和应用。设计模式是对常见问题的...
在Java编程中,有23种经典的GoF(Gang of Four)设计模式,它们被分为三大类:创建型、结构型和行为型。本资源集合了这些模式的详细解释与源码分析,旨在帮助开发者深入理解和应用设计模式。 1. 创建型模式...
Java中的23种设计模式是软件工程中非常重要的概念,它们是解决常见编程问题的成熟解决方案,被广泛应用于各种复杂的软件系统中。这些模式在不同的上下文中提供了可重用的结构和行为,使得代码更加清晰、可维护和扩展...
《Java设计模式PDF》是一本由James W. Cooper编写的经典书籍,该书详细介绍了Java编程语言中的设计模式,并通过实际案例深入探讨了这些模式的应用场景和实现细节。 在本书的前言部分(第3页),作者简要介绍了设计...
内容包括统一建模语言基础知识、面向对象设计原则、设计模式概述、简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式、适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、...
### Java设计模式详解 #### 1. 创建型模式 创建型模式主要关注的是对象的创建方式,它们提供了创建对象的最佳方法。以下是对几种常见的创建型模式的深入解析: ##### 1.1.1 工厂方法(Factory Method) **定义**...
### Java设计模式的应用 #### 一、引言 在当今快速发展的软件开发领域,Java作为一门功能强大且灵活的语言,不仅拥有丰富的API资源,还能与强大的数据库系统无缝对接。这使得许多开发人员能够以模块化的形式构建...
Java设计模式主要包括创建型模式、结构型模式和行为型模式三大类。 #### 二、创建型模式 创建型模式关注的是对象的创建方式,通过不同的方式创建对象,可以更好地管理系统的复杂度,降低耦合度。 ##### 1.1.1 ...
设计模式是软件工程中的一种最佳实践,它是在特定上下文中解决常见问题的模板或蓝图。...在"java24种设计模式详解"这个资源中,你会找到每种模式的详细讲解和实例,这将有助于你深入理解并掌握它们。
" JAVA 设计模式概述" JAVA 设计模式是指在软件设计过程中,为了提高代码的可维护性、灵活性和可扩展性所使用的一些惯用解决方案。JAVA 设计模式可以分为三种:创建模式、结构模式和行为模式。 1. 创建模式 创建...
在Java中,"JAVA设计模式.mobi"这本书可能涵盖了如下设计模式的详细讲解: 1. 单例模式:保证一个类只有一个实例,并提供全局访问点。在Java中,有多种实现单例的方式,包括饿汉式、懒汉式、双重检查锁定(Double-...