常用设计模式2:工厂方法模式(Java)
工厂方法模式(Factory Method Pattern)
1. 简介
工厂方法模式是一种创建型设计模式,它提供了一种将对象的实例化逻辑委托给子类的方法。这种模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法使得一个类的实例化延迟到其子类。
2. 为什么使用工厂方法模式?
- 解耦:将对象的创建与使用代码分离。
- 扩展性:可以轻松地增加新产品类型,而无需修改现有代码。
- 一致性:所有产品遵循同一接口,使得它们可以互相替换。
3. 工厂方法模式的结构
工厂方法模式主要包含以下几个角色:
- Product:抽象产品
- ConcreteProduct:具体产品
- Creator:抽象创建者
- ConcreteCreator:具体创建者
4. Java 实现示例
下面通过一个简单的披萨店例子来说明工厂方法模式:
4.1 定义抽象产品(Product)
public interface Pizza {
void prepare();
void bake();
void cut();
void box();
}
4.2 实现具体产品(ConcreteProduct)
public class CheesePizza implements Pizza {
public void prepare() { System.out.println("Preparing Cheese Pizza"); }
public void bake() { System.out.println("Baking Cheese Pizza"); }
public void cut() { System.out.println("Cutting Cheese Pizza"); }
public void box() { System.out.println("Boxing Cheese Pizza"); }
}
public class PepperoniPizza implements Pizza {
public void prepare() { System.out.println("Preparing Pepperoni Pizza"); }
public void bake() { System.out.println("Baking Pepperoni Pizza"); }
public void cut() { System.out.println("Cutting Pepperoni Pizza"); }
public void box() { System.out.println("Boxing Pepperoni Pizza"); }
}
4.3 定义抽象创建者(Creator)
public abstract class PizzaStore {
public Pizza orderPizza(String type) {
Pizza pizza = createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
// 工厂方法
protected abstract Pizza createPizza(String type);
}
4.4 实现具体创建者(ConcreteCreator)
public class NYPizzaStore extends PizzaStore {
@Override
protected Pizza createPizza(String type) {
if (type.equals("cheese")) {
return new CheesePizza();
} else if (type.equals("pepperoni")) {
return new PepperoniPizza();
}
return null;
}
}
4.5 客户端代码
public class PizzaTest {
public static void main(String[] args) {
PizzaStore nyStore = new NYPizzaStore();
Pizza pizza = nyStore.orderPizza("cheese");
System.out.println("Ethan ordered a " + pizza.getClass().getSimpleName() + "\n");
pizza = nyStore.orderPizza("pepperoni");
System.out.println("Joel ordered a " + pizza.getClass().getSimpleName() + "\n");
}
}
5. 工厂方法模式的优缺点
优点:
- 符合开闭原则,新增产品时无需修改原有代码。
- 符合单一职责原则,将创建逻辑集中管理。
- 客户端代码与具体产品解耦。
缺点:
- 可能会导致类的数量增加,增加系统的复杂度。
- 增加了抽象性,增加了理解难度。
6. 适用场景
- 当一个类不知道它所必须创建的对象的类时。
- 当一个类希望由其子类来指定它所创建的对象时。
- 当想要将对象的创建委托给多个子类中的一个时。
7. 总结
工厂方法模式通过将对象的创建延迟到子类,提供了一种灵活的方式来创建对象。它允许系统独立于实际创建的产品,使得添加新产品变得更加容易。在需要处理复杂对象创建逻辑,或者希望将对象创建与使用分离的场景下,工厂方法模式是一个很好的选择。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!