一、浅谈设计模式
设计模式是我们在软件开发过程中遇到问题的一种解决方案,在项目中合理的使用不同的设计模式,可能会很好的解决我们所遇到的问题。设计模式可以使代码在编写上更加容易,保证了代码的可靠性,提高了代码的可拓展性,使代码的可读性增强。
Java中共有 23 种设计模式,这些设计模式可以分为三大类,分别是:创建型模式 (Creational Patterns)、结构型模式 (Structural Patterns)、行为型模式 (Behavioral Patterns)
二、工厂模式
今天,我们要谈论的工厂模式,属于三大分类中的 创建型模式( Creational Patterns )
那么,什么是创建型模式?
创建型模式,提供了一种在创建对象的同时,隐藏创建逻辑的方式,不使用 new 运算符直接实例化对象。这样就会使得程序在创建对象变量时更加灵活~
工厂模式,提供了一种创建对象的最佳方式,是 Java 中最常用的设计模式之一。在工厂模式中,我们并不会对客户暴露创建逻辑,而是使用一个共同的接口来指向新创建的对象。
注意:复杂对象适合使用工厂模式,而简单的对象只需要使用 new 就可以完成对象的创建,使用工厂模式,需要引入一个工厂类去 "生产" 对象
三、应用实例
假如我们家里需要买一辆汽车,如果没有代理商的情况下,我们需要去汽车加工厂,告知工厂我们需要一辆什么类型的汽车,由工厂来加工,并最后交付给我们这个类型的汽车的实例。在这个过程中,我们并不知道汽车加工的工序是什么,只是告知工厂,我需要汽车这个实例,工厂听到后,负责加工完成我的需求,并交付给我。
代码模型图
代码实现
1. 创建接口
public interface InterfaceCar {
String createCar(String type);
}
2. 创建类来实现这个接口
RedFalg类
public class RedFlag implements InterfaceCar{
@Override
public String createCar(String type) {
return "成功生产出一辆红旗" + type + "!";
}
}
BiYa类
public class BiYa implements InterfaceCar{
@Override
public String createCar(String type) {
return "成功生产出一辆比亚迪" + type + "!";
}
}
HuaWei类
public class HuaWei implements InterfaceCar{
@Override
public String createCar(String type) {
return "成功生产出一辆华为" + type + "!";
}
}
3. 创建工厂,开始 "生产汽车" 实例
public class CarFactory {
public InterfaceCar getCarInstance(String name) {
switch (name) {
case "红旗":
System.out.println("这里是工厂,正在制造红旗汽车!");
return new RedFlag();
case "比亚迪":
System.out.println("这里是工厂,正在制造比亚迪汽车!");
return new BiYa();
case "华为":
System.out.println("这里是工厂,正在制造华为汽车!");
return new HuaWei();
default:
System.out.println("这里是工厂,没有此品牌的汽车~");
return null;
}
}
}
4. 调用工厂,创建汽车实例
public class Test {
public static void main(String[] args) {
InterfaceCar interfaceCar;
CarFactory carFactory = new CarFactory();
interfaceCar = carFactory.getCarInstance("红旗");
System.out.println(interfaceCar.createCar("轿车"));
System.out.println("===================");
interfaceCar = carFactory.getCarInstance("华为");
System.out.println(interfaceCar.createCar("新能源汽车"));
System.out.println("===================");
interfaceCar = carFactory.getCarInstance("比亚迪");
System.out.println(interfaceCar.createCar("越野车"));
System.out.println("===================");
carFactory.getCarInstance("奥迪");
}
}