博客
关于我
设计模式【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访问控制_登陆权限的控制(http_auth_basic_module)
    查看>>
    nginx负载均衡和反相代理的配置
    查看>>
    nginx负载均衡器处理session共享的几种方法(转)
    查看>>
    nginx负载均衡的5种策略(转载)
    查看>>
    nginx负载均衡的五种算法
    查看>>
    nginx转发端口时与导致websocket不生效
    查看>>
    Nginx运维与实战(二)-Https配置
    查看>>
    Nginx配置Https证书
    查看>>
    Nginx配置ssl实现https
    查看>>
    Nginx配置TCP代理指南
    查看>>
    Nginx配置——不记录指定文件类型日志
    查看>>
    nginx配置一、二级域名、多域名对应(api接口、前端网站、后台管理网站)
    查看>>
    Nginx配置代理解决本地html进行ajax请求接口跨域问题
    查看>>
    nginx配置全解
    查看>>
    Nginx配置参数中文说明
    查看>>
    nginx配置域名和ip同时访问、开放多端口
    查看>>
    Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
    查看>>
    Nginx配置如何一键生成
    查看>>
    Nginx配置实例-负载均衡实例:平均访问多台服务器
    查看>>
    Nginx配置文件nginx.conf中文详解(总结)
    查看>>