博客
关于我
设计模式【2.1】-- 简单工厂模式怎么演变成工厂方法模式?
阅读量:398 次
发布时间:2019-03-05

本文共 2237 字,大约阅读时间需要 7 分钟。

工厂方法模式详解

在前几篇文章中,我们已经学习了简单工厂模式的实现方法。今天,我们将探讨另一种常见的设计模式——工厂方法模式。这个模式在软件开发中非常有用,尤其是在需要创建多种不同产品的情况下。

背景介绍

工厂方法模式的核心思想是:通过抽象工厂接口,为每个具体的产品类型提供对应的工厂类。这样一来,每个工厂类负责创建特定类型的产品,而调用者只需要通过抽象工厂接口调用相应的工厂方法来获取所需的产品。

工厂接口的定义

首先,我们定义一个抽象工厂接口 FruitFactory,这个接口包含一个 getFruit 方法,返回一个 Fruit 类型的对象。

public interface FruitFactory {
public Fruit getFruit();
}

水果的具体实现

接下来,我们定义水果的具体实现类。每个水果类都必须实现 Fruit 接口,并提供自己的 process 方法,用于展示该水果的特性。

public class Apple implements Fruit {
public void process() {
System.out.println("I am an Apple");
}
}
public class Pear implements Fruit {
public void process() {
System.out.println("I am a Pear");
}
}
public class Orange implements Fruit {
public void process() {
System.out.println("I am an Orange");
}
}

具体工厂实现

对于每种水果,我们都需要一个对应的工厂类,这些工厂类实现 FruitFactory 接口,并提供 getFruit 方法来返回对应的水果实例。

public class AppleFactory implements FruitFactory {
public Fruit getFruit() {
return new Apple();
}
}
public class PearFactory implements FruitFactory {
public Fruit getFruit() {
return new Pear();
}
}
public class OrangeFactory implements FruitFactory {
public Fruit getFruit() {
return new Orange();
}
}

测试代码

为了验证我们的实现是否正确,我们编写一个测试类 FruitTest,创建不同类型的工厂,并调用它们的 getFruit 方法来获取相应的水果实例,然后执行 process 方法。

public class FruitTest {
public static void main(String[] args) {
FruitFactory appleFactory = new AppleFactory();
Fruit apple = appleFactory.getFruit();
apple.process();
FruitFactory pearFactory = new PearFactory();
Fruit pear = pearFactory.getFruit();
pear.process();
}
}

工厂方法模式的角色分析

工厂方法模式由以下几个角色组成:

  • 抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 getFruit() 来创建水果产品。

  • 具体工厂(Concrete Factory):实现抽象工厂中的抽象方法,创建具体的产品。每个具体工厂对应一种产品类型。

  • 抽象产品(Abstract Product):定义了产品规范,例如所有水果共同的特性。

  • 具体产品(Concrete Product):实现了抽象产品角色所定义的接口,由具体工厂来创建,且与具体工厂一一对应。

  • 工厂方法模式与简单工厂模式的区别

    工厂方法模式与简单工厂模式的主要区别在于:

    • 一对一的关系:工厂方法模式中,每个工厂对应一种产品,各司其职。这种一对一的关系使得当需要扩展新的产品类型时,只需添加新的工厂类和相应的产品实现类即可。

    • 可扩展性:对于产品类型较多的情况,工厂方法模式比简单工厂模式更容易扩展,因为只需要添加新的工厂和产品类,而无需修改现有的代码。

    • 维护方便:每个工厂类只负责创建一种产品,代码结构清晰,方便维护和理解。

    总结

    工厂方法模式通过将产品的创建过程从具体的产品类中解耦,使得系统更加灵活和可扩展。通过定义抽象工厂接口和具体工厂类,我们可以轻松地添加新的产品类型,而无需对现有的代码进行修改。这种设计模式在面对多种产品类型且创建过程复杂的情况下,非常有用。

    转载地址:http://mdmzz.baihongyu.com/

    你可能感兴趣的文章
    Node-RED中Switch开关和Dropdown选择组件的使用
    查看>>
    Node-RED中使用html节点爬取HTML网页资料之爬取Node-RED的最新版本
    查看>>
    Node-RED中使用JSON数据建立web网站
    查看>>
    Node-RED中使用json节点解析JSON数据
    查看>>
    Node-RED中使用node-random节点来实现随机数在折线图中显示
    查看>>
    Node-RED中使用node-red-browser-utils节点实现选择Windows操作系统中的文件并实现图片预览
    查看>>
    Node-RED中使用node-red-contrib-image-output节点实现图片预览
    查看>>
    Node-RED中使用node-red-node-ui-iframe节点实现内嵌iframe访问其他网站的效果
    查看>>
    Node-RED中使用Notification元件显示警告讯息框(温度过高提示)
    查看>>
    Node-RED中使用range范围节点实现从一个范围对应至另一个范围
    查看>>
    Node-RED中实现HTML表单提交和获取提交的内容
    查看>>
    Node-RED中将CSV数据写入txt文件并从文件中读取解析数据
    查看>>
    Node-RED中建立TCP服务端和客户端
    查看>>
    Node-RED中建立Websocket客户端连接
    查看>>
    Node-RED中建立静态网页和动态网页内容
    查看>>
    Node-RED中解析高德地图天气api的json数据显示天气仪表盘
    查看>>
    Node-RED中连接Mysql数据库并实现增删改查的操作
    查看>>
    Node-RED中通过node-red-ui-webcam节点实现访问摄像头并截取照片预览
    查看>>
    Node-RED中配置周期性执行、指定时间阶段执行、指定时间执行事件
    查看>>
    Node-RED安装图形化节点dashboard实现订阅mqtt主题并在仪表盘中显示温度
    查看>>