简单工厂模式
简单工厂模式
简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,通过一个工厂类来决定实例化哪一个类的对象。它是最常见的设计模式之一,主要用于将对象的创建与使用分离,减少代码重复,提高代码的可维护性。
特点
- 工厂角色:负责创建具体产品类的实例,通常是一个包含静态方法的类。
- 具体产品角色:由工厂创建的对象,通常是实现相同接口或继承自相同父类的具体类。
- 客户端角色:使用工厂来获取对象,而不是直接实例化具体类。
实现方式
简单工厂模式通过一个工厂类提供静态方法,根据传入的参数创建并返回对应的产品对象。客户端只需要知道产品的类型,而不需要关心具体产品类的实现细节。
例如:
public class CarFactory {
public static ICar getCar(String carType) {
if (carType == null) {
return null;
}
if (carType.equalsIgnoreCase("SPORT")) {
return new SportCar();
} else if (carType.equalsIgnoreCase("JEEP")) {
return new JeepCar();
} else if (carType.equalsIgnoreCase("HATCHBACK")) {
return new HatchbackCar();
}
return null;
}
}
public class HatchbackCar implements ICar {
@Override
public void getCar() {
System.out.println("恭喜你,获得Hatchback车一辆");
}
}
public class JeepCar implements ICar {
@Override
public void getCar() {
System.out.println("恭喜你,获得越野车一辆");
}
}
public class SportCar implements ICar {
@Override
public void getCar() {
System.out.println("恭喜你,获得跑车一辆");
}
}
//test
public static void main(String[] args) {
//简单工厂方法模式
ICar sport= CarFactory.getCar("SPORT");
if (sport!=null){
sport.getCar();
}
ICar jeepCar=CarFactory.getCar("JeepCar");
if (jeepCar!=null){
jeepCar.getCar();
}
ICar hatchbackCar=CarFactory.getCar("HatchbackCar");
if (hatchbackCar!=null){
hatchbackCar.getCar();
}
}
在这个例子中,CarFactory
是工厂类,负责根据传入的字符串 carType
返回不同类型的汽车对象(SportCar
、JeepCar
、HatchbackCar
)。
优点
- 简化对象创建:客户端不需要知道具体类的构造细节,只需传递参数给工厂方法即可获得对象。
- 集中管理对象创建:将对象创建的逻辑集中到工厂类中,便于维护和修改。
- 易于扩展:只需在工厂类中添加新的判断分支,即可支持新的产品类。
缺点
- 不符合开闭原则:每增加一个新的产品类,都需要修改工厂类的代码。
- 单一职责问题:工厂类职责较重,可能会变得复杂,尤其是在有很多产品类时。
使用场景
- 类的实例化逻辑复杂且频繁变化:通过工厂模式将实例化逻辑集中管理。
- 需要控制实例化过程:如对象池、缓存机制等。
- 不确定具体类时:客户端不需要知道要创建哪个具体类,只需要传递参数给工厂即可。
总结
简单工厂模式是一种有效的设计模式,通过工厂类创建对象,减少了客户端与具体类之间的耦合。虽然实现简单,但在需要扩展时不太灵活,因此适用于需求较为稳定的场景。如果系统的扩展性要求较高,可以考虑使用工厂方法模式或抽象工厂模式。