简单工厂模式
简单工厂模式,有一个工厂类,根据传入的参数不同,创建不同的对象。又叫静态工厂方法类
三个角色
- 工厂类,用来创建对象
- 抽象对象类,所有需要被创建的对象的父类,封装一些公共的属性或方法
- 具体对象类,被创建的类
例子
玩具工厂,传入想要生产的玩具名字,生产对应的玩具
- 抽象类
public abstract class Toy {
public abstract void display();
}
- 工厂类
public class ToyFactory {
public static final String DOG = "dog";
public static final String CAR = "car";
public static Toy productToy(String toyType) throws Exception {
switch (toyType) {
case DOG:
return new Dog();
case CAR:
return new Car();
default:
throw new Exception("暂时不支持生产该玩具");
}
}
}
- 具体类
public class Dog extends Toy {
@Override
public void display() {
System.out.println("我是狗狗");
}
}
public class Car extends Toy {
@Override
public void display() {
System.out.println("我是小汽车");
}
}
- 测试类
public class Main {
public static void main(String[] args) {
try {
Toy dog = ToyFactory.productToy(ToyFactory.DOG);
dog.display();
Toy car = ToyFactory.productToy(ToyFactory.CAR);
car.display();
Toy rabbit = ToyFactory.productToy("rabbit");
rabbit.display();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
总结
优点:实现了对象的创建和使用分离,客户端无需知道要创建的对象的类名
缺点:工厂类中势必会有很多判断逻辑,使得工厂类更加复杂,如果新增具体对象类,需要修改工厂类的方法,不符合开闭原则。