【设计模式】工厂方法模式(Factory Method Pattern)

news/2024/11/15 1:43:34/

目录标题

  • 工厂方法设计模式详解
    • 1. 介绍
    • 2. 结构
    • 3. 实现步骤
      • 3.1 创建抽象产品接口
      • 3.2 创建具体产品类
      • 3.3 创建抽象工厂接口
      • 3.4 创建具体工厂类
      • 3.5 客户端使用
    • 4. 好处与优点
    • 5. 坏处与缺点
    • 6. 适用场景
    • 7. 总结

在这里插入图片描述

工厂方法设计模式详解

1. 介绍

工厂方法模式是一种创建型设计模式,它定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。这样,工厂方法模式让一个类的实例化延迟到其子类。在Java中,工厂方法模式经常用于创建对象,使得客户端代码不需要直接依赖具体的类,而是依赖于接口或抽象类。

2. 结构

工厂方法模式的主要结构包括以下几个角色:

  • 抽象产品(Product):定义产品的接口,是具体产品类的父类或者是接口。
  • 具体产品(ConcreteProduct):实现抽象产品接口,是工厂方法模式中具体创建的对象。
  • 抽象工厂(Creator):定义一个创建产品对象的方法,返回一个抽象产品对象。
  • 具体工厂(ConcreteCreator):实现抽象工厂接口,具体负责创建具体产品对象。

3. 实现步骤

下面以一个简单的示例来说明工厂方法模式的实现过程,假设我们有一个形状(Shape)接口和两个具体形状类:圆形(Circle)和正方形(Square)。

3.1 创建抽象产品接口

// Shape.java
public interface Shape {void draw();
}

3.2 创建具体产品类

// Circle.java
public class Circle implements Shape {@Overridepublic void draw() {System.out.println("画一个圆形");}
}// Square.java
public class Square implements Shape {@Overridepublic void draw() {System.out.println("画一个正方形");}
}

3.3 创建抽象工厂接口

// ShapeFactory.java
public interface ShapeFactory {Shape createShape();
}

3.4 创建具体工厂类

// CircleFactory.java
public class CircleFactory implements ShapeFactory {@Overridepublic Shape createShape() {return new Circle();}
}// SquareFactory.java
public class SquareFactory implements ShapeFactory {@Overridepublic Shape createShape() {return new Square();}
}

3.5 客户端使用

// Client.java
public class Client {public static void main(String[] args) {ShapeFactory circleFactory = new CircleFactory();Shape circle = circleFactory.createShape();circle.draw();ShapeFactory squareFactory = new SquareFactory();Shape square = squareFactory.createShape();square.draw();}
}

4. 好处与优点

松耦合工厂方法模式将客户端代码与具体产品的实现分离,使得客户端不需要知道具体产品的类名,只需关注抽象产品和工厂接口。

扩展性强:通过新增具体工厂和产品类,可以轻松扩展系统,符合开闭原则。
符合单一职责原则:每个具体工厂只负责创建一种具体产品,符合单一职责原则。

5. 坏处与缺点

类数量增多:每个具体产品都需要对应一个具体工厂,当产品种类较多时,类的数量会增加。
增加系统复杂度:引入了更多的类和接口,增加了系统的复杂度,适用于较复杂的场景。

6. 适用场景

工厂方法模式适用于以下场景:

  1. 当一个类不知道它所需要的对象的类时,可以使用工厂方法模式,让子类决定创建的具体对象。
  2. 当一个类希望由它的子类来指定它所创建的对象时,可以使用工厂方法模式

7. 总结

工厂方法模式是一种常见且实用的设计模式,通过定义工厂接口和具体工厂类,将对象的创建延迟到子类中实现,从而提高了代码的灵活性和扩展性。在设计系统时,根据具体需求选择合适的设计模式能够提高代码的可维护性和可扩展性。

在这里插入图片描述


http://www.ppmy.cn/news/1451881.html

相关文章

设计模式之业务代表模式

在编程江湖的风雨中漂泊多年,每当我遇到那些错综复杂的业务逻辑和系统交互,总有一个模式像一位忠诚的骑士,默默守护着我的代码城堡,那就是——业务代表模式(Business Delegate Pattern)。它不是最耀眼的明星…

深度学习中权重初始化的重要性

深度学习模型中的权重初始化经常被人忽略,而事实上这是非常重要的一个步骤,模型的初始化权重的好坏关系到模型的训练成功与否,以及训练速度是否快速,效果是否更好等等,这次我们专门来看看深度学习中的权重初始化问题。…

深入解析:匹配网络(Matching Networks)的原理和应用

匹配网络(Matching Networks) 深入解析:匹配网络(Matching Networks)的原理和应用匹配网络的核心原理工作原理算法流程 匹配网络的实现应用示例结论 深入解析:匹配网络(Matching Networks&#…

古典密码学简介

目录 C. D. Shannon: 一、置换密码 二、单表代替密码 ① 加法密码 ② 乘法密码 ③密钥词组代替密码 三、多表代替密码 代数密码 四、古典密码的穷举分析 1、单表代替密码分析 五、古典密码的统计分析 1、密钥词组单表代替密码的统计分析 2、英语的统计规…

SpringCloud学习笔记(二)Ribbon负载均衡、Nacos注册中心、Nacos与Eureka的区别

文章目录 4 Ribbon负载均衡4.1 负载均衡原理4.2 源码解读4.3 负载均衡策略4.3.1 内置的负载均衡策略4.3.2 自定义负载均衡策略4.3.2.1 方式一:定义IRule4.3.2.2 方式二:配置文件 4.4 饥饿加载 5 Nacos注册中心5.1 认识和安装Nacos5.2 服务注册到Nacos5.3…

如何完全卸载QT

第一步,用QT自带的软件卸载QT 第二步,卸载下面路径的所有QT配置 C:用户/(你的用户)/AppData/Local/目录下所有与Qt相关内容 C:用户/(你的用户)/AppData/Local/Temp/所有与Qt相关内容 C:用户/(你的用户)/AppData/Roaming/所有与Qt相关内容

定制开发AI名片商城AI导购系统:引领营销自动化的新时代

在数字营销日新月异的今天,一个革命性的工具——定制开发AI名片商城AI导购系统,正逐渐崭露头角,成为企业私域运营中的得力助手。它不仅仅是一个营销工具,更是一个拥有强大营销自动化能力和先进算法技术的在线助理,为企…

题目:吃奶酪

问题描述: 解题思路: 枚举每种吃奶酪顺序,并计算其距离,选择最小的距离即答案。v数组:记录顺序。 注意点:1. 每次用于min的s需要重置为0。 2. 实数包括小数,所以结构体内x,y为double类型。 3. 第…