-
简单工厂模式
使用参数或者配置文件等事先定义好的变量,然后利用分支判断初始化具体产品类并返回;
不符合“开发-封闭”原则,每次增加产品,都需要修改类方法。工厂类单一,不用维护大量的工厂类;
工厂方法模式和抽象工厂模式规避了不符合“开发-封闭”原则,同时支持更灵活的增加产品; -
适用性
1)当一个类不知道它所必须创建的对象的类的时候。
2)当一个类希望由它的子类来指定它所创建的对象的时候。 -
举例
如哈佛汽车加工厂既可以生产跑车又可以生产卡车。
-
UML类图
-
代码示例
- 定义哈佛汽车接口(或抽象类)
package com.jin.demo.DesignPatterns.Factory.SimpleFactory; /** * 定义哈佛汽车接口(或抽象类) * @auther jinsx * @date 2019-05-15 08:58 */ public interface HFCar { // 什么汽车都可以跑 void run(); }
- 哈佛跑车
package com.jin.demo.DesignPatterns.Factory.SimpleFactory; /** * 哈佛跑车 * @auther jinsx * @date 2019-05-15 09:00 */ public class HFRoadster implements HFCar{ @Override public void run() { System.out.println("哈佛小跑车,起步就是快"); } }
- 哈佛卡车
package com.jin.demo.DesignPatterns.Factory.SimpleFactory; /** * 哈佛卡车 * @auther jinsx * @date 2019-05-15 09:03 */ public class HFTruck implements HFCar { @Override public void run() { System.out.println("哈佛小卡车,运输能力就是强"); } }
- 声明简单工厂,有一个返回Car对象的静态类
package com.jin.demo.DesignPatterns.Factory.SimpleFactory; /** * 简单工厂 * @auther jinsx * @date 2019-05-15 09:06 */ public class CarSimpleFactory { // 需要使用定义好的参数获取产品对象,没增加产品都需要修改次工厂方法 public static HFCar createHFCar(String type){ HFCar car = null; switch (type){ case "roadster" : car = new HFRoadster(); break; case "truck" : car = new HFTruck(); break; } return car; } }
- 测试类
package com.jin.demo.DesignPatterns.Factory.SimpleFactory; /** * 测试类 * @auther jinsx * @date 2019-05-15 09:15 */ public class TestSimpleFactory { public static void main(String[] args) { // 来一个哈佛小跑 HFCar roadster = CarSimpleFactory.createHFCar("roadster"); roadster.run(); // 来一个哈佛小卡 HFCar truck = CarSimpleFactory.createHFCar("truck"); truck.run(); } }
- 执行测试结果
哈佛小跑车,起步就是快 哈佛小卡车,运输能力就是强
- 定义哈佛汽车接口(或抽象类)
-
点击Java之23种设计模式查看更多的设计模式