JAVA设计模式—工厂模式
工厂模式是一种创建型设计模式,它提供了一种创建对象的接口,但是由子类决定要实例化的类是哪一个。工厂模式使得一个类的实例化延迟到其子类。
用代码进行举例演示
假设我们有一个产品接口 Product
和两个具体产品类 ConcreteProductA
和 ConcreteProductB
,以及一个工厂接口 Factory
和两个具体工厂类 ConcreteFactoryA
和 ConcreteFactoryB
。
// 产品接口
interface Product {void display();
}// 具体产品类 A
class ConcreteProductA implements Product {@Overridepublic void display() {System.out.println("This is ConcreteProductA.");}
}// 具体产品类 B
class ConcreteProductB implements Product {@Overridepublic void display() {System.out.println("This is ConcreteProductB.");}
}// 工厂接口
interface Factory {Product createProduct();
}// 具体工厂类 A
class ConcreteFactoryA implements Factory {@Overridepublic Product createProduct() {return new ConcreteProductA();}
}// 具体工厂类 B
class ConcreteFactoryB implements Factory {@Overridepublic Product createProduct() {return new ConcreteProductB();}
}
使用工厂模式的客户端代码:
public class Client {public static void main(String[] args) {// 使用工厂A创建产品AFactory factoryA = new ConcreteFactoryA();Product productA = factoryA.createProduct();productA.display();// 使用工厂B创建产品BFactory factoryB = new ConcreteFactoryB();Product productB = factoryB.createProduct();productB.display();}
}
介绍工厂模式的具体应用场景
工厂模式的具体应用场景包括:
- 数据库驱动的选择: 在连接数据库时,不同数据库有不同的驱动,可以使用工厂模式根据配置或条件选择合适的数据库驱动。
- 日志记录器的选择: 在应用中可能需要使用不同的日志记录器(如文件日志、数据库日志),工厂模式可以根据配置选择合适的日志记录器。
- 图形界面库中的组件创建: 在图形界面库中,不同的操作系统或主题可能需要使用不同的UI组件,工厂模式可以根据运行时条件创建相应的UI组件。
介绍工厂模式的优点
工厂模式的优点包括:
- 封装性好: 客户端代码不需要知道具体产品的类名,只需知道工厂接口和产品接口即可。
- 扩展性好: 如果需要添加新的产品类,只需要创建对应的具体产品类和对应的具体工厂类即可,而不需要修改现有代码。
- 符合单一职责原则: 每个具体工厂类只负责创建对应的产品,符合单一职责原则,降低了类的复杂度和耦合度。
- 易于管理对象: 通过工厂模式,集中管理对象的创建,有利于统一管理和维护。
- 利于解耦: 客户端代码和具体产品类的实现解耦,可以更灵活地替换和切换产品类的实现。