摘要
工厂方法模式
工厂方法模式是一种创建型设计模式,它提供了一种将对象的创建委托给子类的方法,使得一个类的实例化延迟到其子类。这种模式解决了创建对象时需要决定使用哪个具体类的问题。
在工厂方法模式中,有以下几个关键角色:
- Product(产品):定义了工厂方法模式创建的对象的接口。
- ConcreteProductA 和 ConcreteProductB(具体产品):实现了 Product 接口的具体产品类。
- Creator(创建者):声明了工厂方法,该方法返回一个 Product 对象。
- ConcreteCreatorA 和 ConcreteCreatorB(具体创建者):实现了工厂方法,返回具体的 Product 对象。
UML类图
Java示例代码
// Product 接口
interface Product {
void operation();
}
// 具体产品类 A
class ConcreteProductA implements Product {
@Override
public void operation() {
System.out.println("ConcreteProductA operation");
}
}
// 具体产品类 B
class ConcreteProductB implements Product {
@Override
public void operation() {
System.out.println("ConcreteProductB operation");
}
}
// 创建者抽象类
abstract class Creator {
// 工厂方法
abstract Product factoryMethod();
}
// 具体创建者类 A
class ConcreteCreatorA extends Creator {
@Override
Product factoryMethod() {
return new ConcreteProductA();
}
}
// 具体创建者类 B
class ConcreteCreatorB extends Creator {
@Override
Product factoryMethod() {
return new ConcreteProductB();
}
}
// 客户端代码
public class Main {
public static void main(String[] args) {
// 创建具体创建者对象 A
Creator creatorA = new ConcreteCreatorA();
// 调用工厂方法创建产品 A
Product productA = creatorA.factoryMethod();
// 调用产品 A 的操作
productA.operation();
// 创建具体创建者对象 B
Creator creatorB = new ConcreteCreatorB();
// 调用工厂方法创建产品 B
Product productB = creatorB.factoryMethod();
// 调用产品 B 的操作
productB.operation();
}
}
适用场景
工厂方法模式适用于以下场景:
- 对象的创建需要延迟到其子类:当一个类无法预知需要创建的对象的具体类型,或者希望将对象的创建延迟到其子类时,可以使用工厂方法模式。工厂方法模式允许子类决定要创建的对象的类型。
- 避免与特定类耦合:当希望在代码中避免直接使用特定类,并希望通过接口或抽象类来引用对象时,可以使用工厂方法模式。工厂方法模式使得客户端代码不需要知道具体的类,只需要知道它们实现了哪些接口或抽象类。
- 需要在不同条件下创建不同类型的对象:当需要根据不同的条件或参数来创建不同类型的对象时,可以使用工厂方法模式。工厂方法模式允许子类根据具体情况来决定要创建的对象的类型。
- 需要扩展或替换对象的创建逻辑:当希望将对象的创建逻辑从客户端代码中分离出来,以便更容易地扩展或替换对象的创建逻辑时,可以使用工厂方法模式。工厂方法模式使得客户端代码只依赖于接口或抽象类,而不依赖于具体的类。
总的来说,工厂方法模式适用于需要将对象的创建延迟到其子类,并且希望通过接口或抽象类来引用对象的场景。它提供了一种灵活的方式来创建对象,同时降低了客户端代码与具体类之间的耦合度。
评论区
0/2048