- 工厂方法模式是一种创建型设计模式,在父类中提供一个创建对象得方法,允许子类决定实列化对象的类型。这种设计模式也是java开发中最常见的一种模式,它的主要意图是定义一个创建对象的接口,让其子类自己决定实列化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
- 模拟创建汽车功能:在此场景中,我们可以创建奔驰,宝马,凯迪拉克等等。
public void buildCar(Integer type) {
if(type.intvalue() == 1) {
// 创建奔驰
}
if(type.intvalue() == 2) {
// 创建宝马
}
if(type.intvalue() == 3) {
// 创建凯迪拉克
}
......
}
- 如上就是使用ifelse非常直接写出来业务需求,这样的代码在经历过几次迭代后将变得非常难以维护,下面我们尝试用工厂方法模式进行重构。
// 先定义一个创建汽车接口
public interface BuildCar {
// 创建车的抽象方法
void build();
}
// 定义创建奔驰车的类
public class BcCar implements BuildCar {
void build() {
// 创建奔驰的具体逻辑
...
}
}
// 定义创建宝马车的类
public class BmCar implements BuildCar {
void build() {
// 创建宝马的具体逻辑
...
}
}
// 定义创建凯迪拉克车的类
public class KdlkCar implements BuildCar {
void build() {
// 创建凯迪拉克的具体逻辑
...
}
}
// 创建工厂
public class CarFactory {
public BuildCar getBuildCar(Integer type) {
if(type.intvalue() == 1) {
return new BcCar();
}
if(type.intvalue() == 2) {
return new BmCar();
}
if(type.intvalue() == 3) {
return new KdlkCar();
}
}
}
CarFactory carFactory = new CarFactory ();
// 使用工厂类创建奔驰车
carFactory .getBuildCar(1).build();
后续同理
......
- 这样我们将每个单独的发奖逻辑和主业务剥离出来,满足单一职责,不同的发奖逻辑在属于自己单独的类中实现,满足开闭原则。但这样一来也有一些问题,比如有非常多的奖品类型,那么实现的子类会极速扩张。因此也需要其他的设计模式进行优化,这些会在后续的设计模式中涉及到。
网友评论