掌握计划模式之工厂方法模式
工厂方法模式工厂方法模式(Factory Method Pattern)是一种创建型计划模式,它定义了一个用于创建对象的接口,但由子类决定要实例化的详细类。工厂方法模式将对象的创建委托给子类,从而实现了类的实例化耽误和高内聚低耦合的目标。
工厂方法模式的结构
工厂方法模式通常包含以下几个脚色:
[*]Product(产物接口或抽象类):
[*]定义产物的公共接口,所有详细产物都应实现这个接口。
[*]ConcreteProduct(详细产物):
[*]实现产物接口,提供详细的实现。
[*]Creator(抽象工厂类):
[*]声明工厂方法,用于返回一个Product对象。这个类通常是一个抽象类或接口,定义了产物的创建过程。
[*]ConcreteCreator(详细工厂类):
[*]实现工厂方法,负责实例化详细的产物对象。不同的详细工厂会创建不同的详细产物。
工厂方法模式的优缺点
优点
[*]解耦:客户端不必要关心详细产物的创建过程,只需调用工厂方法获取产物,低落了系统的耦合度。
[*]同一管理对象创建: 工厂模式可以同一管理对象的创建过程,包括初始化、配置等操作,使得创建过程更加灵活和可控。
[*]符合开闭原则:新增产物时,只必要创建新的详细产物类和工厂类,不必要修改现有代码。
[*]灵活性:通过继承和多态,子类可以决定创建哪种详细产物。
缺点
[*]类的数目增加:为了支持不同类型的产物,必须创建多个详细工厂类,类的数目会增加。
[*]可能增加系统复杂性:比简单工厂模式要复杂,可能会使得系统变得更加难以理解和维护。
工厂方法模式的示例代码
假设我们有一个汽车生产工厂,工厂可以生产不同类型的汽车,例如BMW和Audi。
类图
https://img2024.cnblogs.com/blog/1209017/202412/1209017-20241206211952366-110449096.png
示例代码
产物接口和产物类
public interface Car {
void drive();
}
public class BMW implements Car {
@Override
public void drive() {
System.out.println("Driving a BMW car.");
}
}
public class Audi implements Car {
@Override
public void drive() {
System.out.println("Driving an Audi car.");
}
}工厂相关的类
public abstract class CarFactory {
// 工厂方法,返回具体产品
public abstract Car createCar();
}
public class BMWFactory extends CarFactory {
@Override
public Car createCar() {
return new BMW(); // 返回具体的BMW对象
}
}
public class AudiFactory extends CarFactory {
@Override
public Car createCar() {
return new Audi(); // 返回具体的Audi对象
}
}测试代码
public class Client {
public static void main(String[] args) {
// 使用工厂方法创建汽车
CarFactory factory = new BMWFactory(); // 通过BMW工厂创建BMW汽车
Car car = factory.createCar();
car.drive(); // 输出:Driving a BMW car.
factory = new AudiFactory(); // 通过Audi工厂创建Audi汽车
car = factory.createCar();
car.drive(); // 输出:Driving an Audi car.
}
}测试结果
Driving a BMW car.
Driving an Audi car.
工厂方法模式的变体
除了传统的工厂方法模式,偶然在实际应用中还会使用一些变体:
[*]抽象工厂模式:如果有多个产物族(即多个系列的产物),可以通过抽象工厂模式来实现每个工厂负责创建一组相关产物。与工厂方法模式的区别在于,工厂方法模式通常只涉及一个产物类的创建,而抽象工厂模式处理多个产物类的创建。
[*]工厂方法和单例模式结合:工厂方法可以和单例模式结合使用,确保工厂实例和产物实例的唯一性。
总结
工厂方法模式是一种创建型计划模式,通过将对象的创建过程委托给子类来实现灵活的产物创建。相比于简单工厂模式,工厂方法模式更加灵活,符合开闭原则,适用于必要扩展产物种类的场景,但也可能导致类数目增加。
工厂类提供某个产物的工厂方法来生产产物,隐藏对象的创建过程,使客户端无需了解对象的详细创建逻辑,使得客户端代码与详细类的解耦,淘汰了依赖,更容易维护和扩展。
[*]对象的详细创建逻辑可以使用反射、动态代理或者结合其他创建型计划模式来完成对象的实例化;
[*]引入了“中间者”和面向抽象编程使用了多态的特性,起到了解耦的作用;
[*]使用者(客户端)面向抽象(接口、抽象类)编程,而不直接依赖于详细产物类。
https://img2024.cnblogs.com/blog/1209017/202412/1209017-20241206212032443-120291877.gif
什么是计划模式?
单例模式及其思想
计划模式--原型模式及其编程思想
掌握计划模式之生成器模式
掌握计划模式之简单工厂模式
超实用的SpringAOP实战之日记记录
2023年下半年软考考试重磅消息
通过软考后却领取不到实体证书?
盘算机算法计划与分析(第5版)
Java全栈学习路线、学习资源和面试题一条龙
软考证书=职称证书?
软考中级--软件计划师毫无保留的备考分享
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]