简单工厂模式
工厂方法模式有很多扩展,而且与其他模式结合使用威力更大,以下是“简单工厂模式”。
uml类图
场景
一个模块仅需要一个工厂类,没有必要把他产生出来,使用静态的方法就可以。
实现
产品接口及具体产品类不变
删除抽象工厂类
修改具体工厂类,将实例化的方法修改成静态的,简化实例化过程
MachineFactory.java
/**
* @author heshiyuan
* @description <p></p>
* @path java-design-pattern/com.hsy.java.design.pattern.method
* @date 2018/1/30 16:01
* @github http://github.com/shiyuan2he
* @email shiyuan4work@sina.com
* Copyright (c) 2018 shiyuan4work@sina.com All rights reserved.
* @price ¥5 微信:hewei1109
*/
public class MachineFactory{
public static <T extends Machine> T createMachine(Class<T> c) {
Machine machine = null ;
try {
machine = (Machine) Class.forName(c.getName()).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return (T) machine;
}
}
测试
ClientTest.java
/**
* @author heshiyuan
* @description <p></p>
* @path java-design-pattern/com.hsy.java.design.pattern.method.client
* @date 2018/1/30 16:13
* @github http://github.com/shiyuan2he
* @email shiyuan4work@sina.com
* Copyright (c) 2018 shiyuan4work@sina.com All rights reserved.
* @price ¥5 微信:hewei1109
*/
public class ClientTest {
@Test
public void createMachine(){
// 打包给客户的集装箱
List<Machine> list = new ArrayList<>() ;
/**
* 1.客户下订单,开始造车(2辆汽车,2两卡车,2两自行车)
*/
// 造汽车生产线
for(int i=0;i<2;i++){
list.add(MachineFactory.createMachine(Car.class));
}
// 造卡车生产线
for(int i=0;i<2;i++){
list.add(MachineFactory.createMachine(Truck.class));
}
// 造自行车生产线
for(int i=0;i<2;i++){
list.add(MachineFactory.createMachine(Bike.class));
}
//客户开始测验每辆车的性能
list.forEach(ele -> {
ele.start() ;
ele.speed();
ele.stop();
if(ele instanceof Car){
((Car) ele).blow();
}
if(ele instanceof Truck){
((Truck) ele).blow();
}
});
}
}