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

本文共 2198 字,大约阅读时间需要 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/

    你可能感兴趣的文章
    Nginx配置参数中文说明
    查看>>
    nginx配置域名和ip同时访问、开放多端口
    查看>>
    Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
    查看>>
    Nginx配置如何一键生成
    查看>>
    Nginx配置实例-负载均衡实例:平均访问多台服务器
    查看>>
    Nginx配置文件nginx.conf中文详解(总结)
    查看>>
    Nginx配置负载均衡到后台网关集群
    查看>>
    ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
    查看>>
    NHibernate学习[1]
    查看>>
    NHibernate异常:No persister for的解决办法
    查看>>
    NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
    查看>>
    NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
    查看>>
    NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
    查看>>
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>