一 设计模式-工厂方法模式
工厂方法模式(Factory Method Pattern)是一种常用的类创建型设计模式,它属于对象的创建型模式,主要用来封装对象的创建过程。在该模式中,一个抽象工厂定义了一个接口用于创建产品对象,但实际的实例化延迟到子类中进行,也就是说,具体的产品是由其对应的工厂来创建的。
角色和职责:
1 抽象工厂(Abstract Factory):
- 定义一个创建产品接口,创建产品工厂方法。
- 通常是一个抽象类或接口,带有一个抽象方法,该方法返回一个抽象产品类型。
2 具体工厂(Concrete Factory):
- 实现抽象工厂中定义的工厂方法,负责生产具体的产品对象。
- 根据传入的参数或其他条件决定创建哪种具体产品对象。
3 抽象产品(Abstract Product):
- 描述所有可能被创建的产品的公共接口。
- 可以是一个抽象类或接口,为各种具体产品定义了共同的方法。
4 具体产品(Concrete Product):
- 是抽象产品接口的具体实现类。
- 具体工厂创建并返回的具体对象类型。
优点:
- 符合开闭原则,增加新的产品时,无需修改已有代码,只需新增一个具体的工厂类和产品类即可。
- 抽象了对象的创建过程,使得系统具有更好的灵活性和可扩展性。
- 将对象的创建与使用分离,降低了模块间的耦合度。
缺点:
- 当需要增加新产品时,必须提供一个与之对应的新工厂,这可能导致类数量增多,增加了系统的复杂性。
- 如果产品之间的差异较大,可能会导致工厂类变得复杂且难以维护。
应用场景:
- 当一个类不知道它所必须创建的对象的确切类时。
- 当一个类希望由它的子类来指定它所创建的对象类时。
- 当构造过程必须使用客户程序提供的信息时。
代码例子:
java
// 抽象产品
public abstract class Coffee {
public abstract void brew();
}
// 具体产品
public class Americano extends Coffee {
@Override
public void brew() {
// 美式咖啡冲泡逻辑
}
}
public class Latte extends Coffee {
@Override
public void brew() {
// 拿铁咖啡冲泡逻辑
}
}
// 抽象工厂
public abstract class CoffeeFactory {
public abstract Coffee makeCoffee();
}
// 具体工厂
public class AmericanoFactory extends CoffeeFactory {
@Override
public Coffee makeCoffee() {
return new Americano();
}
}
public class LatteFactory extends CoffeeFactory {
@Override
public Coffee makeCoffee() {
return new Latte();
}
}
在上面的代码中,CoffeeFactory
是抽象工厂,AmericanoFactory
和LatteFactory
是具体工厂,而Americano
和Latte
是具体产品。通过不同的工厂可以创建不同类型的咖啡产品。