博客
关于我
设计模式二十三之工厂模式--工厂方法模式
阅读量:525 次
发布时间:2019-03-08

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

工厂方法模式(Factory Method Pattern)是一种软件设计模式,旨在解决简单工厂模式违背开闭原则的问题。这一模式通过对简单工厂模式的抽象化,使得系统在不修改原来代码的情况下引入新的产品类型,得以更好地遵循开闭原则。

工厂方法模式的优缺点

其优点体现在对简单工厂模式的扩展和优化上:新增产品类型时,只需增加对应的工厂类,无须修改现有工厂代码,实现了高度的灵活性和可维护性。此外,这一模式还符合高内聚低耦合的设计理念,减少了类与类之间的相互耦合程度。

然而,该模式也存在一些潜在缺陷:类的数量可能变得过多,增加了代码的复杂度,同时该模式仅适用于生产单一类型的产品,无法像简单工厂模式那样支持多个产品类型的批量生产。

工厂方法模式的适用场景

工厂方法模式在以下场景下表现出色:

  • 当客户端仅关注最终产品的品牌或类型,无需了解产品的具体创建过程时。
  • 需要在不修改现有代码的前提下扩展支持新产品类型。

工厂方法模式的核心角色

工厂方法模式主要涉及三个核心角色:

  • 抽象产品(Abstract Product):定义产品的基本行为和属性,通常由接口或抽象类实现。

  • 具体产品(Concrete Product):实现了抽象产品中定义的具体行为和属性,通常为实际产品类别的代表。

  • 抽象工厂(Abstract Factory):定义一个工厂接口或抽象类,其方法用于获取产品的具体实现类。以下是其常见的接口定义示例:

  • public interface FactoryMethod {    /** 获取职业 */    Profession getProfession();}

    对应的具体实现类样例如下:

    public class DeveloperFactory implements FactoryMethod {    @Override    public Profession getProfession() {        return new Developer();    }}public class TesterFactory implements FactoryMethod {    @Override    public Profession getProfession() {        return new Tester();    }}

    工厂方法模式的测试示例

    以下是一个典型的工厂方法模式测试代码实现:

    public class FactoryMethodMain {    public static void main(String[] args) {        // 创建并获取开发人员职业信息        Profession developer = new DeveloperFactory().getProfession();        System.out.println(developer.outDesc());                // 创建并获取测试员职业信息        Profession tester = new TesterFactory().getProfession();        System.out.println(Tester.outDesc());    }}

    这种设计理念使得系统能够灵活扩展产品类型,同时保持代码的高可维护性和低耦合性。工厂方法模式通过引入抽象工厂概念,不仅提高了系统的扩展性,也为后续的mpp(Model-View-Presenter)模式等框架奠定了基础,是软件开发中一个非常重要的设计技巧。

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

    你可能感兴趣的文章
    设计模式(18)——中介者模式
    查看>>
    net start mysql 发生系统错误2 系统找不到指定的文件
    查看>>
    发工资的骚操作。。
    查看>>
    送一个ipad【最后一个】
    查看>>
    重磅!大数据《实战全栈工程师成长手册》,附 PDF & PPT 下载
    查看>>
    JAVA异常和基础类库
    查看>>
    洛谷【数据结构1-1】线性表
    查看>>
    AI技术国际领先!一文回顾百度大脑的2020
    查看>>
    CVPR 2021 | 港科大&旷视提出ACON:激活还是不激活?学习自定义激活函数
    查看>>
    EfficientNetV2震撼发布!更小的模型,更快的训练
    查看>>
    python-计网实验二-套接字
    查看>>
    C++学习日记2——多态篇的纯虚函数和抽象类
    查看>>
    F - 数据结构实验之链表四:有序链表的归并
    查看>>
    为什么使用%lf读取double型的值,而用%f进行显示?
    查看>>
    用JavaScript实现希尔排序
    查看>>
    iconfont字体图标导入到vue项目中
    查看>>
    2020.11.30-12.6周报
    查看>>
    Nuxt.js服务器端渲染框架
    查看>>
    Svn commit failed aborting commit
    查看>>
    卧槽!细说JVM内存模型,已拿到offer
    查看>>