请编写一个简单工厂模式的实际应用案例代码。
参考回答
问题:编写一个简单工厂模式的实际应用案例代码。
// 产品接口
interface Product {
void use();
}
// 具体产品A
class ProductA implements Product {
@Override
public void use() {
System.out.println("使用产品A");
}
}
// 具体产品B
class ProductB implements Product {
@Override
public void use() {
System.out.println("使用产品B");
}
}
// 简单工厂
class ProductFactory {
public static Product createProduct(String type) {
if (type.equals("A")) {
return new ProductA();
} else if (type.equals("B")) {
return new ProductB();
} else {
throw new IllegalArgumentException("未知产品类型");
}
}
}
// 客户端
public class SimpleFactoryExample {
public static void main(String[] args) {
Product productA = ProductFactory.createProduct("A");
productA.use();
Product productB = ProductFactory.createProduct("B");
productB.use();
}
}
详细讲解与拓展
1. 简单工厂模式的结构
- 产品接口(Product):定义了所有具体产品的公共接口,客户端通过该接口与具体产品进行交互。
- 具体产品(ProductA 和 ProductB):实现了产品接口,提供具体的实现。
- 工厂(ProductFactory):根据客户端提供的参数,创建并返回相应的产品实例。
- 客户端(SimpleFactoryExample):通过工厂获取产品实例,调用产品的方法。
2. 核心思想
简单工厂模式的核心在于将对象的创建逻辑封装到工厂类中,客户端不需要直接创建对象,而是通过工厂来获取。它的目的是将客户端和具体产品之间的依赖关系解耦,使得客户端不直接关心产品的创建细节。
3. 优点
– 封装性强:客户端无需知道产品的具体实现,只需知道如何通过工厂获取产品。
– 扩展性好:当需要添加新产品时,只需要修改工厂类,新增对应的产品类即可,符合开放封闭原则。
4. 缺点
– 工厂类责任过重:工厂类需要了解所有的产品类型,一旦有新的产品,工厂类也需要修改,违反了单一责任原则。
– 不利于复杂场景:如果产品种类增多,工厂的判断逻辑会变得复杂且难以维护。
5. 扩展
– 产品数量增加时的复杂性:假设产品种类增多,简单工厂模式的缺点会逐渐显现。可以考虑使用其他设计模式来解决这些问题,例如工厂方法模式或抽象工厂模式。
举个例子:
假设我们在开发一个图形绘制应用,程序支持绘制不同形状的图形。我们可以通过简单工厂模式创建不同的图形对象:
// 图形接口
interface Shape {
void draw();
}
// 具体图形:圆形
class Circle implements Shape {
@Override
public void draw() {
System.out.println("绘制圆形");
}
}
// 具体图形:矩形
class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("绘制矩形");
}
}
// 简单工厂
class ShapeFactory {
public static Shape createShape(String type) {
if (type.equals("circle")) {
return new Circle();
} else if (type.equals("rectangle")) {
return new Rectangle();
} else {
throw new IllegalArgumentException("未知图形类型");
}
}
}
// 客户端
public class ShapeFactoryExample {
public static void main(String[] args) {
Shape circle = ShapeFactory.createShape("circle");
circle.draw();
Shape rectangle = ShapeFactory.createShape("rectangle");
rectangle.draw();
}
}
在这个例子中,简单工厂模式帮助我们封装了不同图形的创建逻辑,客户端只关心如何使用这些图形。
总结
简单工厂模式是一种创建型模式,通过工厂类封装对象创建的逻辑。它的优点是解耦和高内聚,但随着产品种类的增加,工厂类可能变得过于庞大,维护和扩展性较差。