什么是工厂方法模式
工厂方法模式定义一个创建对象的接口,让实现该接口的子类来创建所需要的对象。
工厂方法和简单工厂方法的区别:
- 简单工厂方法模式将创建对象的过程放在静态方法中实现,而工厂方法模式让创建对象的过程放在子类中实现;
- 简单工厂方法模式修改新增违背开闭原则,而工厂方法模式则是通过子类来创建对象;
需求描述
宝马品牌车有宝马X1、X3、X5等系列,这三个系列车分别由三个工厂创建,这里以工厂方法模式来实现该例子。
UML类图如下:
X1Factory、X3Factory、X5Factory工厂都实现工厂接口BMWFactory,并实现createCar方法。
X1Car、X3Car、X5Car都实现实体BMWCar接口,并实现run方法。
代码实现
创建系列车类
创建IBMWCar接口,并定义run方法。
public interface IBMWCar {
void run();
}
创建宝马X1车类,并实现IBMWCar接口,实现run方法。
public class X1Car implements IBMWCar {
@Override
public void run() {
System.out.println("X1Car run");
}
}
创建宝马X3车类,并实现IBMWCar接口,实现run方法。
public class X3Car implements IBMWCar {
@Override
public void run() {
System.out.println("X3Car run");
}
}
创建宝马X5类,并实现IBMWCar接口,实现run方法。
public class X5Car implements IBMWCar {
@Override
public void run() {
System.out.println("X5Car run");
}
}
创建工厂接口和工厂子类
创建工厂接口,定义createCar方法。
public interface IBMWFactory {
public IBMWCar createCar();
}
创建X1工厂类,并实现工厂接口,实现createCar方法,创建X1Car对象。
public class X1Factory implements IBMWFactory {
@Override
public IBMWCar createCar() {
return new X1Car();
}
}
创建X3工厂类,并实现工厂接口,实现createCar方法,创建X3Car对象。
public class X3Factory implements IBMWFactory {
@Override
public IBMWCar createCar() {
return new X3Car();
}
}
创建X5工厂类,并实现工厂接口,实现createCar方法,创建X5Car对象。
public class X5Factory implements IBMWFactory {
@Override
public IBMWCar createCar() {
return new X5Car();
}
}
测试
public class Test {
public static void main(String[] args) {
// 创建X1工厂类,并创建X1车
X1Factory x1Factory = new X1Factory();
IBMWCar carX1 = x1Factory.createCar();
carX1.run();
// 创建X3工厂类,并创建X3车
X3Factory x3Factory = new X3Factory();
IBMWCar carX3 = x3Factory.createCar();
carX3.run();
// 创建X5工厂类,并创建X5车
X5Factory x5Factory = new X5Factory();
IBMWCar carX5 = x5Factory.createCar();
carX5.run();
}
}
运行结果:
X1Car run
X3Car run
X5Car run
以上便是工厂方法模式的实现,相比简单工厂方法,工厂方法模式符合单一职责原则和开闭原则,让扩展变得简单。
示例代码:factory_method
个人公众号,喜欢的可以关注一下: