一、基本介绍
简单工厂模式:是一种传递简单的信息到工厂,由工厂对象决定创建出哪一种产品的类实例的模式。
二、包含角色
1.工厂角色:负责根据客户端传递的信息创建其对应的实例对象。
2.抽象角色:需要定义产品的抽象,为工厂创建出来实例的公共接口。
3.具体产品:抽象角色的实现类,由工厂返回的具体产品实例。
三、案例及UML类图
案例说明:
某个客户需要不同种类的交通工具,我们使用简单工厂根据客户需要去创建不同种类的交通工具。
UML类图:
类Vehicle:
public interface Vehicle {
/**
* 交通工具都能开,且每一类交通工具行驶的方式都不一样
*/
void drive();
}
说明:交通工具接口定义类,抽象角色。
类VehicleFactory:
public class VehicleFactory {
public static Vehicle createVehicle(String type) {
Vehicle vehicle = null;
switch (type) {
case "汽车":
vehicle = new Car();
break;
case "自行车":
vehicle = new Bicycle();
break;
}
return vehicle;
}
}
说明:交通工具工厂,工厂角色,用于根据客户端传递的信息创建不同的产品。
类Bicycle:
public class Bicycle implements Vehicle {
@Override
public void drive() {
System.out.println("自行车两个轮子行驶!");
}
}
说明:交通工具类Vehicle的实现类之一,具体产品,自行车产品。
类Car:
public class Car implements Vehicle {
@Override
public void drive() {
System.out.println("汽车四个轮子行驶!");
}
}
说明:交通工具类Vehicle的实现类之一,具体产品,汽车产品。
类SimpleFactoryTest:
public class SimpleFactoryTest {
public static void main(String[] args) {
//通过交通工具工厂获取到具体的产品
Vehicle vehicle = VehicleFactory.createVehicle("汽车");
vehicle.drive();
}
}
说明:测试以及客户端类。
四、优缺点
此模式的优缺点:
优:统一由工厂获取对象,方便快捷。
缺:严重违背的开闭原则,即新增产品时需要修改创建产品实例的代码。
五、适用场景
1.适用于已知产品种类且不再增加的有限产品的创建,如电脑产品的创建,目前已知电脑产品为笔记本、台式、平板三类,且短时间也不会再增加新的种类。