工厂模式是一种常用的软件开发模式,它的主要目的是把实例化对象的任务交给工厂来完成,而不是让客户端程序直接创建对象,这样可以简化客户端程序的设计和实现,而且可以让客户端程序与实例化的对象解耦。工厂模式主要涉及到三个角色:工厂类、抽象产品类和具体产品类。
应用
工厂模式在软件开发中有着广泛的应用,它可以用来创建各种不同类型的对象,如数据库连接、网络连接、线程等。工厂模式也可以用来创建复杂的对象,如报表、图表等。工厂模式还可以用来创建框架,如Spring框架、Struts框架等。
优点
- 客户端程序与实例化的对象解耦,可以简化客户端程序的设计和实现。
- 可以把实例化对象的任务交给工厂来完成,从而提高系统的灵活性。
- 可以提高系统的可维护性,只需要修改工厂类的代码,而不需要修改客户端程序。
- 可以把实例化对象的任务交给工厂来完成,从而提高系统的可扩展性。
缺点
- 工厂类的职责相对过重,增加新的产品需要修改工厂类的判断逻辑,违背了开闭原则。
- 由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。
使用方法
// 定义抽象产品类
public abstract class Product {
public abstract void use();
}
// 定义具体产品类
public class ConcreteProduct1 extends Product {
@Override
public void use() {
System.out.println("使用具体产品1");
}
}
public class ConcreteProduct2 extends Product {
@Override
public void use() {
System.out.println("使用具体产品2");
}
}
// 定义工厂类
public class Factory {
public static Product getProduct(String type) {
if (type.equals("1")) {
return new ConcreteProduct1();
} else if (type.equals("2")) {
return new ConcreteProduct2();
}
return null;
}
}
// 使用
Product product = Factory.getProduct("1");
product.use();