1. 设计模式之简单工厂模式:是个人都会的设计模式
1.1. 介绍
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一,它提供了一种创建对象的方式,使得创建对象的过程与使用对象的过程分离。
工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。
通过使用工厂模式,可以将对象的创建逻辑封装在一个工厂类中,而不是在客户端代码中直接实例化对象,这样可以提高代码的可维护性和可扩展性。
工厂模式会有变种升级,当多个工厂创建对象,都有公用逻辑和个性化逻辑时,可以进一步优化,使用模版模式进一步抽象,称为 工厂方法模式(模板模式+简单工厂模式)。这里有个了解,不通过代码实现来举例了。
应用实例
在企业开发中,一般很少自己实现工厂模式,因为使用 spring,spring 容器本质上就是大的工厂,spring 通过 xml 或者 注解创建各种实例类,然后项目中从容器中获取实例来使用。
优缺点及建议
优点
1.调用者只需要知道对象的名称即可创建对象。
2.扩展性高,如果需要增加新产品,只需扩展一个工厂类即可。
3.屏蔽了产品的具体实现,调用者只关心产品的接口。
缺点
1.每次增加一个产品时,都需要增加一个具体类和对应的工厂,使系统中类的数量成倍增加,增加了系统的复杂度和具体类的依赖。
注意事项
1.工厂模式适用于生成复杂对象的场景。如果对象较为简单,通过 new 即可完成创建,则不必使用工厂模式。使用工厂模式会引入一个工厂类,增加系统复杂度。
1.2. 实现及相关代码
假设某业务需要频繁的创建新的对象
1.2.1. 没使用设计模式方式
接口及数据对象
public interface Product {
void execute();
}
public static class ProductImpl1 implements Product {
public void execute() {
System.out.print("产品1的功能实现");
}
}
public static class ProductImpl2 implements Product {
public void execute() {
System.out.print("产品2的功能实现");
}
}
调用方法
public static void main(String[] args) {
// Product product = new ProductImpl1();
// product.execute();
Product product = new ProductImpl2();
product.execute();
}
可能会遇到的问题
如果你直接面向一个类来编程,new来创建类的实例的话,假如有 100 个地方。突然对象实现要更改,需要使用新的类实现名字。
去一个个找原来的名字并更改是很麻烦的,而且代码不容易维护,扩展性很差。
1.2.2. 使用设计模式方式
使用工厂模式,可以把创建对象的逻辑都封装到工厂中,其他地方统一从工厂中获取对象实例。当需要更改新的实现类的时候,只需要调整工厂创建实例实现即可。
接口及数据对象
public interface Product {
void execute();
}
public static class ProductImpl1 implements Product {
public void execute() {
System.out.print("产品1的功能实现");
}
}
public static class ProductImpl2 implements Product {
public void execute() {
System.out.print("产品2的功能实现");
}
}
public static class ProductFactory {
public static Product create() {
// return new ProductImpl1();
return new ProductImpl2();
}
}
调用方法
public static void main(String[] args) {
Product product = ProductFactory.create();
product.execute();
}