目录
一、简单介绍
二、未使用工厂模式之前
三、简单工厂模式
初始
优化
总结
一、简单介绍
工厂模式是一种软件设计模式,用于创建对象的方法。在工厂模式中,创建对象的逻辑被封装在一个单独的类中,该类负责根据特定条件或参数创建合适的对象并返回给调用者,而调用者无需关心对象的创建细节。这有助于降低代码的耦合度,并提高代码的可维护性和扩展性。
核心本质:
- 实例化对象不使用new,用工厂方法代替
- 将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦
三种模式:
- 简单工厂模式:用来生产同一等级结构中的任意产品(对于增加新的产品,需要球盖已有代码)
- 工厂方法模式:用来生产同一等级结构中的固定产品(支持增加任意产品)
- 抽象工厂模式:围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂
二、未使用工厂模式之前
(1)创建一个Car接口,和两个实现类。
public interface Car {void name();
}public class WuLing implements Car{@Overridepublic void name() {System.out.println("五菱");}
}public class Tesla implements Car{@Overridepublic void name() {System.out.println("特斯拉");}
}
(2)创建一个Customer类,
public class Customer {public static void main(String[] args) {Car car1 = new WuLing();Car car2 = new Tesla();car1.name();car2.name();}
}
这是原来的样子,相当于car1和car2是自己创建的,但是工厂模式是实例化对象不使用new,所以我们需要修改Customer类。
三、简单工厂模式
初始
(1)创建一个工厂CarFactory类,此时创建car只需要传入一个字符串就可以了,
public class CarFactory {public static Car getCar(String car) {if (car.equals("五菱")) {return new WuLing();} else if (car.equals("特斯拉")) {return new Tesla();}else {return null;}}
}
(2)修改Customer类,使用工厂创建car,
public class Customer {public static void main(String[] args) {Car car1 =CarFactory.getCar("五菱");Car car2 =CarFactory.getCar("特斯拉");car1.name();car2.name();}
}
这样就相当于我们是直接去工厂拿车,不用去关注工厂里面的细节,工厂的好处就在这儿。
但是目前这个代码有个缺点就是假设我们要再增加一种新车,就需要修改CarFactory类里的getCar()代码,不满足开闭原则,不建议对原代码进行修改。
优化
优化工厂CarFactory类,
public class CarFactory {public static Car getWuLing(){return new WuLing();}public static Car getTesla(){return new Tesla();}
}
因此,修改Customer类,
public class Customer {public static void main(String[] args) {Car car1 =CarFactory.getWuLing();Car car2 =CarFactory.getTesla();car1.name();car2.name();}
}
画个流程图分析一下,
目前这个代码还是需要进行优化的,因为假设我们现在有一种新车,要在车工厂新增一种,一定会改车工厂的代码,如果不修改车工厂的代码的话是拿不到新增的新车的,这个方式就不太好。
那么我们需要把这个车工厂也提取成一个接口,
请移步我的另一篇博客
总结
简单工厂模式(Simple Factory Pattern)是工厂模式的一种最基本的形式,它提供一个单独的工厂类,用于根据传入的参数或条件创建并返回合适的对象。简单工厂模式不属于 GoF(Gang of Four)设计模式中的正式成员,但它是工厂模式的一个简化版本,常用于对象创建的场景中。
在简单工厂模式中,客户端通过调用工厂类的静态方法或实例方法,并传入相应的参数来获取所需的对象,而无需直接实例化具体的对象类。这样做可以使客户端免于直接与具体的产品类耦合,从而更加灵活地管理对象的创建和替换。
简单工厂模式通常包括以下角色:
-
工厂类(Factory Class):负责根据客户端的请求创建并返回相应的对象实例。工厂类通常包含一个或多个静态方法,根据传入的参数或条件决定创建哪种类型的对象。
-
产品类(Product Class):具体的对象类型,由工厂类根据客户端请求创建的对象。产品类可以是接口、抽象类或具体类的形式。
简单工厂模式的优点在于简单易懂,适用于对于对象创建逻辑相对简单的场景。然而,它也有一些局限性,例如随着产品类型增加,工厂类会变得臃肿,不易维护;同时,客户端需要知道具体产品的类型信息,可能会破坏封装性。