简单工厂模式是一种创建型设计模式,用于创建单个对象.
它主要由以下3个部分组成:
工厂类(Factory):负责创建单个对象。
抽象产品(Product):定义产品的接口。
具体产品(Concrete Product):实现抽象产品接口,提供具体的产品。
下面是一个简单的例子,展示了如何使用简单工厂模式创建一个汽车:
/**
* 抽象产品(Product) 定义产品 需要实现的功能
*/
public interface Car {
void start();
}
/**
* 工厂类(Factory):负责创建单个对象
*/
public class CarFactory {
public static Car createCar(String carType) {
if (carType.equals("宝马")) {
return new BMW();
} else if (carType.equals("兰博基尼")) {
return new lamborghini();
} else {
return null;
}
}
}
/**
* 具体实现(Concrete Product) 创建车辆
*/
public class BMW implements Car{
@Override
public void start() {
System.out.println("启动宝马");
}
}
/**
* 启动车辆
*/
public class Client {
public static void main(String[] args) {
Car car = CarFactory.createCar("宝马");
car.start();
Car car1 = CarFactory.createCar("兰博基尼");
car1.start();
}
}
总结: 简单的说就是把创建对象交给工厂客户端就不需要自己new直接根据某类型直接拿即可
但是这违背了开闭原则
什么是开闭原则?
开闭原则是面向对象设计中的一项基本原则,指对扩展开放,对修改关闭。
它的主要目的是为了保护软件的可扩展性和可维护性,避免在修改软件的过程中对其他部分造成影响。
开闭原则的主要内容有以下几点:
对扩展开放:软件应该具有良好的扩展性,在不修改原有代码的情况下可以扩展新的功能。
对修改关闭:软件应该具有良好的稳定性,在修改原有代码的情况下不会对其他部分造成影响。
开闭原则的优点:
- 通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,使变化中的软件系统有一定的适应性和灵活性.。
- 已有的软件模块,特别是最重要的抽象层模块不能再修改,这就使变化中的软件系统有一定的稳定性和延续性。
开闭原则可以通过以下几种方式来实现:
- 将具体实现和抽象接口分离:通过使用抽象接口隔离具体实现,可以让软件在不修改原有代码的情况下扩展新的功能。
- 使用多态:通过多态的方式来实现抽象接口和具体实现之间的绑定,可以在运行时动态绑定,实现软件的扩展性。
- 使用模板方法:通过模板方法将算法的步骤固定,而具体实现由子类实现,实现软件的扩展性。
通过开闭原则的实现, - 使用反射:通过客户端传递的对象字节码来创建实例,这样子就不需要进行修改原始工厂代码
/**
* 使用反射实现开闭原则
*/
public static <T> Car createCarOpen(Class<T> tClass) {
Car car = null;
try {
Object instance = Class.forName(tClass.getName()).newInstance();
if (instance instanceof Car) {
car = (Car) instance;
}
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
throw new RuntimeException(e);
}
return car;
}
简单工厂在源码中的应用
JDk当中Calendar实例的创建
评论区