设计模式----工厂设计模式(Factory)
文章目录
- 设计模式----工厂设计模式(Factory)
- 什么是工厂设计模式?
- 实现功能详解
- 具体代码实现
- 汽车的接口和具体的汽车类
- 汽车工厂
- 汽车商店(测试类)
- 运行结果
- 总结
什么是工厂设计模式?
工厂设计模式是我们编程开发中最常用的一种设计模式,是属于创建型的设计模式。
举个例子,假如现在我们要买一辆车,我们不必去管这辆轿车是怎么做出来的,以及这种轿车类型的具体实现,只需要通过我们的需求从一个轿车工厂中拿到该轿车即可。
这就是工厂模式的具体作用。
实现功能详解
大家可以思考一下,首先,汽车工厂肯定是生产多种多样的汽车(若只生产一种,无需工厂类,直接实例化即可)的,那么怎样才能通过一个汽车工厂生产各种各样的汽车呢?
Java的多态性正好可以解决这个问题,我们可以通过定义一个汽车的抽象类或接口,使其具有汽车共有特性,然后定义多个子类汽车类,代表每个汽车的单独配置或特性,通过对象的向上传递,实例化汽车类对象,然后再将对象返回即可。
如图:
这是根据此思想画的基本流程,哈哈,画的不太好,小伙伴们能够理解就成。
具体代码实现
汽车的接口和具体的汽车类
所有汽车类的父类Car接口
package com.design_patterns.factory.instance;
public interface Car {
void produce();
}
救护车类
package com.design_patterns.factory.instance;
public class AmbulanceCar implements Car {
@Override
public void produce() {
System.out.println("救护车成功生产~");
System.out.println("价格为---->88889元\n应用范围---->医疗救治");
}
}
劳斯莱斯车类
package com.design_patterns.factory.instance;
public class RollsRoyceCar implements Car {
@Override
public void produce() {
System.out.println("劳斯莱斯车成功生产~");
System.out.println("价格为---->888000元\n应用范围---->贵族出行");
}
}
时风三轮车类
package com.design_patterns.factory.instance;
public class ShifengTricycleCar implements Car{
@Override
public void produce() {
System.out.println("时风三轮车成功生产~");
System.out.println("价格为---->20000元\n应用范围---->农业运输");
}
}
坦克装甲车类
package com.design_patterns.factory.instance;
public class TankCar implements Car {
@Override
public void produce() {
System.out.println("装甲坦克车成功生产~");
System.out.println("价格为---->999999元\n应用范围---->国防军事");
}
}
汽车工厂
package com.design_patterns.factory.instance;
public class CarFactory {
private Car car; //声明Car接口对象car
public Car createCar(String carType){
switch (carType){
case "ambulance":
car = new AmbulanceCar(); //生产救护车
break;
case "rollsRoyce":
car = new RollsRoyceCar(); //生产劳斯莱斯
break;
case "shifengTricycle":
car = new ShifengTricycleCar(); //生产时风三轮车
break;
case "tank":
car = new TankCar(); //生产坦克车
break;
default:
car = null; //输入错误,null
break;
}
return car; //返回生产的车型
}
}
汽车商店(测试类)
package com.design_patterns.factory.instance;
import java.util.Scanner;
public class CarStore {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //定义并实例化标准输入流对象
String carType = null; //定义字符串,用于用户输入
Car car = null; //声明Car接口对象car
CarFactory carFactory = new CarFactory(); //实例化汽车工厂类
do{
System.out.println("\n请输入您所需订购的车型:");
carType = sc.nextLine(); //输出车型
car = carFactory.createCar(carType); //调用工厂对象的createCar()进行汽车生产并返回
if(car != null){ //若生产成功
car.produce(); //打印生产成功信息
} else {
System.out.println("~~暂无此种汽车生产,生产失败~~"); //否则打印生产失败信息
break; //跳出循环
}
}while (true);
}
}
运行结果
请输入您所需订购的车型:
ambulance
救护车成功生产~
价格为---->88889元
应用范围---->医疗救治
请输入您所需订购的车型:
rollsRoyce
劳斯莱斯车成功生产~
价格为---->888000元
应用范围---->贵族出行
请输入您所需订购的车型:
tank
装甲坦克车成功生产~
价格为---->999999元
应用范围---->国防军事
请输入您所需订购的车型:
shifengTricycle
时风三轮车成功生产~
价格为---->20000元
应用范围---->农业运输
请输入您所需订购的车型:
plane
~~暂无此种汽车生产,生产失败~~
总结
如果想要在汽车工厂中添加新的汽车种类,只需再创建一个实现Car接口的汽车子类,在汽车工厂中的switch语句中添加一句
case "新汽车的名字":
car = new 新的汽车子类();
break;
即可。
至此,就是设计模式的工厂模式的简单讲解与应用,如果觉得这篇文章写得不错的话,麻烦请随手点个赞,给点鼓励继续创作,嘿嘿,感谢!