-
工厂方法模式
工厂方法是简单工厂的进一步的延伸,也可以说是抽象工厂的一个特例,解决了简单工厂违反“开发-封闭”原则问题,把工厂抽象出一个类,只不过只有一个产品;
-
适用性
1)当一个类不知道它所必须创建的对象的类的时候。
2)当一个类希望由它的子类来指定它所创建的对象的时候。 -
举例
如哈佛汽车加工厂既可以生产跑车又可以生产卡车。
-
UML类图
-
代码示例
- 定义哈佛汽车接口(或抽象类)
package com.jin.demo.DesignPatterns.Factory.FactoryMethod; /** * 定义哈佛汽车接口(或抽象类) * @auther jinsx * @date 2019-05-15 08:58 */ public interface HFCar { // 什么汽车都可以跑 void run(); }
- 哈佛跑车
package com.jin.demo.DesignPatterns.Factory.FactoryMethod; /** * 哈佛跑车 * @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.FactoryMethod; /** * 哈佛卡车 * @auther jinsx * @date 2019-05-15 09:03 */ public class HFTruck implements HFCar { @Override public void run() { System.out.println("哈佛小卡车,运输能力就是强"); } }
- 声明工厂方法接口(或抽象类)
package com.jin.demo.DesignPatterns.Factory.FactoryMethod; /** * 工厂方法接口(或抽象类) * @auther jinsx * @date 2019-05-15 10:00 */ public interface CarFactoryMethod { HFCar createHFCar(); }
- 跑车工厂
package com.jin.demo.DesignPatterns.Factory.FactoryMethod; /** * 跑车工厂 * @auther jinsx * @date 2019-05-15 10:02 */ public class RoadsterFactory implements CarFactoryMethod { // 哈佛跑车 @Override public HFCar createHFCar() { return new HFRoadster(); } }
- 卡车工厂
package com.jin.demo.DesignPatterns.Factory.FactoryMethod; /** * 卡车工厂 * @auther jinsx * @date 2019-05-15 10:05 */ public class TruckFactory implements CarFactoryMethod { // 哈佛卡车 @Override public HFCar createHFCar() { return new HFTruck(); } }
- 测试类
package com.jin.demo.DesignPatterns.Factory.FactoryMethod; /** * 测试类 * @auther jinsx * @date 2019-05-15 09:15 */ public class TestFactoryMethod { public static void main(String[] args) { // 来一个哈佛小跑 CarFactoryMethod r = new RoadsterFactory(); HFCar rCar = r.createHFCar(); rCar.run(); // 来一个哈佛小卡 CarFactoryMethod t = new TruckFactory(); HFCar tCar = t.createHFCar(); tCar.run(); } }
- 执行测试结果
哈佛小跑车,起步就是快 哈佛小卡车,运输能力就是强
- 定义哈佛汽车接口(或抽象类)
-
点击Java之23种设计模式查看更多的设计模式
Java设计模式之工厂方法模式
最新推荐文章于 2023-11-03 18:40:05 发布