一 模式定义
一个创建产品对象的工厂接口,让子类决定实例化哪一种实例对象,也就是将实际创建实例对象的工作推迟到子类当中,核心工厂类不再负责具体产品的创建。
二 模式举例
1 模式分析
我们借用三国中曹操献刀来说明这一模式的运用。抽象之后的关系如下图。
2 工厂方法模式的静态建模
大司徒王允—生成宝刀的抽象工厂
校尉曹操—具体工厂生产七星宝刀
各类宝刀—抽象产品
七星宝刀—具体产品七星宝刀
3 代码示例
3.1 建立产品
抽象宝刀——AbstractSword
package com.demo.factory.model; /** * 定义抽象宝刀 * * @author Administrator * */ public abstract class AbstractSword { // 宝刀的名字 private String name; // 抽象父类的构造方法 public AbstractSword() { } // 获得宝刀名字 public String getName() { return name; } // 设置宝刀名字 public void setName(String name) { this.name = name; } }
具体宝刀——QixingSword七星宝刀
package com.demo.factory.model.object; import com.demo.factory.model.AbstractSword; /** * 七星宝刀类 * * @author * */ public class QixingSword extends AbstractSword { /** * 构造方法设置宝刀的名称 */ public QixingSword() { this.setName("七星宝刀"); } }
3.2 建立工厂
抽象宝刀工厂——ISwordFactory 生产抽象宝刀
package com.demo.factory.itf; import com.demo.factory.model.AbstractSword; /** * 宝刀工厂 * * @author Administrator * */ public interface ISwordFactory { /** * 生产各类宝刀(返回值是抽象宝刀类型) * * @return */ public AbstractSword createSword(); }
具体宝刀工厂——Caocao 生产七星宝刀
package com.demo.factory; import com.demo.factory.itf.ISwordFactory; import com.demo.factory.model.AbstractSword; import com.demo.factory.model.object.QixingSword; /** * 曹操具体工厂 * * @author * */ public class Caocao implements ISwordFactory { /** * 实现ISwordFactory接口的createSword方法,生产七星宝刀 */ public AbstractSword createSword() { return new QixingSword(); } }
3.3 故事情节的历史重现
package com.demo; import java.util.HashMap; import java.util.Map; import com.demo.factory.Caocao2; import com.demo.factory.itf.ISwordFactory; import com.demo.factory.model.AbstractSword; public class MainApp { /** * @param args */ public static void main(String[] args) { // 创建曹操实例对象(返回使用接口类型 ISwordFactory) ISwordFactory swordFactory = new Caocao(); //ISwordFactory swordFactory = new Caocao2(); // 获得宝刀实例——八星宝刀 AbstractSword sword = swordFactory.createSword(); // 刺杀董卓 System.out.println("曹操使用" + sword.getName() + "刺杀董卓!"); } }
运行结果:
曹操使用七星宝刀刺杀董卓!
3.4 用八星宝刀来考验模式
创建八星宝刀-——BaxingSword
package com.demo.factory.model.object; import com.demo.factory.model.AbstractSword; /** * 八星宝刀类 * * @author * */ public class BaxingSword extends AbstractSword { /** * 构造方法设置宝刀的名称 */ public BaxingSword() { this.setName("八星宝刀"); } }
创建具体宝刀工厂——Caocao2 生产八星宝刀
package com.demo.factory; import com.demo.factory.itf.ISwordFactory; import com.demo.factory.model.AbstractSword; import com.demo.factory.model.object.BaxingSword; /** * 使用八星宝刀的曹操具体工厂 * * @author * */ public class Caocao2 implements ISwordFactory { // 生产八星宝刀 public AbstractSword createSword() { return new BaxingSword(); } }
让曹操使用八星宝刀刺杀董卓
package com.demo; import java.util.HashMap; import java.util.Map; import com.demo.factory.Caocao2; import com.demo.factory.itf.ISwordFactory; import com.demo.factory.model.AbstractSword; public class MainApp { /** * @param args */ public static void main(String[] args) { // 创建曹操实例对象(返回使用接口类型 ISwordFactory) //ISwordFactory swordFactory = new Caocao(); ISwordFactory swordFactory = new Caocao2(); // 获得宝刀实例——八星宝刀 AbstractSword sword = swordFactory.createSword(); // 刺杀董卓 System.out.println("曹操使用" + sword.getName() + "刺杀董卓!"); } }
运行结果:
曹操使用八星宝刀刺杀董卓!
三 该模式使用到的设计原则
- “开-闭”原则:一个软件实体应该对扩展开放,对修改关闭。我们在设计软件模块的时候应该使这个模块可以在不被修改的前提下被扩展。
- 依赖倒置原则:不论工厂还是产品都应该依赖于抽象,而不是具体的实现类。
四 使用场合
- 当子类型可能会有很多,以后需要不断增添不同的子类实现时。
- 当一个系统还在框架设计阶段,还不知道将来需要实例化哪些具体类时。
- 系统设计之初不需要具体对象的概念(或者没有具体对象的概念)
相关推荐
在实际应用中,工厂方法模式常用于以下场景: 1. 当一个类不知道它所必须创建的对象的类的时候,如系统需要根据用户选择来创建不同类型的对象。 2. 当一个类希望由它的子类来决定实例化哪一个类的时候,允许子类决定...
#### 二、工厂方法模式应用案例 本案例通过一个简单的计算器程序来演示工厂方法模式的应用。该程序支持加、减、乘、除四种运算。 #### 三、代码分析 1. **定义抽象产品** ```java interface Operation { ...
工厂方法模式作为设计模式的一种,被广泛应用于各种场景,包括Android源码中。本文将详细解析工厂方法模式的概念、结构、优势,并结合Android源码进行示例分析。 首先,工厂方法模式的核心思想是“定义一个用于创建...
在给定的资源中,"设计模式交流之工厂模式-shannonxu-2014-10-24.pptx"可能是详细的PPT讲解,涵盖了这些模式的概念、结构、优缺点以及实际应用案例。而"Factory"可能是一个代码示例,展示了工厂模式的具体实现,包括...
工厂方法模式和抽象工厂模式是两种常见的设计模式,它们都属于创建型模式,用于解决对象的创建问题。在软件设计中,这两种模式都是用来隔离对象的创建和使用,以提高系统的灵活性和可扩展性。 首先,工厂方法模式的...
在软件工程中,设计模式被广泛应用于解决各种常见的编程问题。工厂方法模式作为创建型模式中...在实际开发过程中,开发者应根据具体的应用场景合理选择使用工厂方法模式,以达到提升代码质量和降低系统维护成本的目的。
比萨店生产比萨的过程可以看作是一种典型的工厂方法模式应用。在这个例子中,我们有不同类型的比萨,如芝士比萨和蔬菜比萨,它们是具体的产品类。同时,每个城市(如芝加哥和纽约)的比萨店是工厂角色,负责创建对应...
在这个"iOS工厂方法模式(四则运算)demo"中,我们可以看到如何将工厂方法模式应用到实现四则运算的场景中。 首先,我们需要理解工厂方法模式的基本结构。它包含以下几个角色: 1. **抽象产品类(Product)**:定义...
#### 工厂方法模式应用示例 假设我们有一个比萨店,需要根据客户的要求制作不同种类的比萨。如果没有使用工厂方法,代码可能会像下面这样: ```java Pizza orderPizza(String type) { Pizza pizza; if (type....
“设计模式 c# 工厂方法模式”暗示我们关注的是如何在C#中实现和应用工厂方法模式。C#作为.NET框架下的主要开发语言,支持丰富的面向对象特性,使得工厂方法模式得以完美地融入到C#项目中。 ### 标签解析: “设计...
工厂方法模式是面向对象设计模式中的一种,它属于创建型模式,主要解决的是...通过阅读`FactoryMethod`目录下的源代码,你可以更深入地理解如何在Java中应用这个模式,并学习到如何在实际项目中灵活运用工厂方法模式。
本文将探讨三个重要的设计模式:抽象工厂模式、工厂方法模式以及策略模式,并结合一个实际的场景——手机加工厂,来具体阐述它们的应用。 首先,我们来看**抽象工厂模式**。这个模式主要用于创建相关或依赖对象的...
在实际项目中,工厂方法模式广泛应用在数据库连接、GUI组件、框架设计等领域。通过工厂方法,我们可以根据不同的条件或者配置动态地创建出所需的对象,提高了代码的灵活性和可扩展性。例如,在数据库连接的例子中,...
工厂方法模式是面向对象设计模式中的行为模式,它属于创建型模式的一种,主要解决的是当一个类不知道它所必须创建的对象的类的时候,或者当一个类希望由它的子类来决定实例化哪个类的时候,如何封装这个实例化过程的...
《工厂方法模式在简易计算器重构中的应用》 在软件工程中,设计模式是解决常见问题的模板,它们为程序员提供了一种标准化的解决方案。工厂方法模式(Factory Method Pattern)是面向对象设计模式的一种,它在实际...
在这个“工厂方法模式java实例demo”中,我们可以期待看到如何在实际代码中应用这一模式。 在刘伟老师的《设计模式》一书中,他可能通过一个具体的示例解释了工厂方法模式的概念。这个例子可能涉及创建不同类型的...
6. **实际应用**:在Java中,`java.sql.DriverManager.getConnection()`就是一个典型的工厂方法模式应用,它根据传入的URL和其他参数动态地返回相应的数据库连接类的实例。 在给定的文件列表中,"factoryMethod...
在软件设计模式中,工厂方法模式(Factory Method Pattern)和抽象工厂模式(Abstract Factory Pattern)是两种常用的创建型设计模式,它们都属于“工厂”家族,但有着不同的应用场景和目标。 工厂方法模式的核心...
6. **与简单工厂模式的区别**:工厂方法模式与简单工厂模式的主要区别在于,简单工厂只有一个工厂类,而工厂方法模式将创建对象的职责分配给了多个具体工厂,更易于扩展。 7. **适用性与限制**:虽然工厂方法模式在...
这个“IOS 工厂方法模式代码Demo”是为开发者提供了一个直观的例子,帮助他们理解并应用这种模式。让我们深入探讨一下工厂方法模式以及如何在iOS项目中实现它。 工厂方法模式的核心思想是定义一个创建对象的接口,...