前言
本篇介绍设计模式中的工厂方法模式,所谓的工厂方法就是抽象出一个工厂可以创建一类产品,具体的产品继承于抽象出来的一类产品有各自的实现,主要还是遵循了开闭原则,总结一句话就是,抽象工厂创建一类产品,具体的实例又是通过这一类产品的具体产品类来实现。以后如果增加新的产品,只需要集成抽象的产品类然后实现具体的产品就好,调用的时候还是通过抽象产品工厂来创建。参考类图如下:
1、编码测试场景描述
定义一种可移动的产品,并用工厂创建,这里可移动的产品属于抽象产品类,具体的产品有汽车和飞机属于具体产品分别集成了可移动的产品抽象类,然后创建一个抽象的工厂来制造具体的可移动产品。
编码层面分析,这里设计一个可移动的抽象产品类Moveable,两个具体的产品类Car和Plan分别继承自Moveable,然后创建一个MoveableFactory抽象工厂来创建具体的可移动产品。
2、具体编码实现
-
可移动产品抽象类
package com.czing.designpatterns.factorymethod;
/**
* @Description
* 抽象的产品类,定义抽象产品的属性
* @Author wangchengzhi
* @Date 2023/5/15 20:21
*/
public interface Moveable {
void go();
}
-
具体产品汽车类(Car)
package com.czing.designpatterns.factorymethod;
/**
* @Description TODO
* @Author wangchengzhi
* @Date 2023/5/15 20:22
*/
public class Car implements Moveable {
@Override
public void go() {
System.out.println("汽车启动wuwuwuwu~~~~");
}
}
-
具体产品飞机类(Plan)
package com.czing.designpatterns.factorymethod;
/**
* @Description TODO
* @Author wangchengzhi
* @Date 2023/5/15 20:23
*/
public class Plan implements Moveable {
@Override
public void go() {
System.out.println("飞机起飞嗖嗖嗖嗖~~~~~~");
}
}
-
创造具体移动产品的工厂类
package com.czing.designpatterns.factorymethod;
/**
* @Description
* 创建产品的工厂,得到不同的具体实例
* @Author wangchengzhi
* @Date 2023/5/15 20:30
*/
public class MoveableFactory {
private static Moveable moveable;
public static Moveable createMoveable(Class c) throws Exception {
moveable= (Moveable)Class.forName(c.getName()).newInstance();
return moveable;
}
}
-
测试运行验证
package com.czing.designpatterns.factorymethod;
/**
* @Description TODO
* @Author wangchengzhi
* @Date 2023/5/15 20:34
*/
public class main {
public static void main(String[] args) throws Exception {
Moveable car = MoveableFactory.createMoveable(Car.class);
car.go();
Moveable plan = MoveableFactory.createMoveable(Plan.class);
plan.go();
}
}
结语
工厂方法模式,主要在于体会,具体产品通过抽象工厂来创建,添加不同产品的时候 只需要维护对应的新加产品的具体产品实现类,其他的可以直接通过抽象工厂来创建。以上编码可以直接运行验证,欢迎大家分享交流。