设计模式——工厂方法模式

时间:2022-04-29 18:43:14

知识点:工厂方法模式创建对象

(一)什么是工厂方法模式

定义一个创建产品对象的工厂接口,子类工厂实现接口来创建具体的产品对象

(二)角色

抽象工厂:是工厂方法模式的核心,创建具体对象的的工厂类必须实现这个接口

具体工厂:实现抽象工厂接口的具体工厂,用来创建具体产品对象

抽象产品:具体产品对象拥有的共同父类或者接口

具体产品:实现抽象产品的接口,包含了产品的具体细节

产品使用者:使用产品者

(三)代码实例

//工厂方法设计模式
public class FactoryMethodTest {
public static void main(String[] args) {
//创建某种工厂,创建对应的产品对象,执行产品对象中的doWork()方法
PersonWorkFactory stuFac=new StudentWorkFactory();
stuFac.getWorkClass().doWork();

PersonWorkFactory teaFac=new TeacherWorkFactory();
teaFac.getWorkClass().doWork();
}
}
//抽象工厂
interface PersonWorkFactory{
Work getWorkClass();
}
//具体工厂,生产产品
class StudentWorkFactory implements PersonWorkFactory{
@Override
public Work getWorkClass() {
return new StudentWork();
}
}
class TeacherWorkFactory implements PersonWorkFactory{
@Override
public Work getWorkClass() {
return new TeacherWork();
}
}
//抽象产品
interface Work{
void doWork();
}
//具体产品
class StudentWork implements Work{

@Override
public void doWork() {
System.out.println("学习!");
}
}
class TeacherWork implements Work{
@Override
public void doWork() {
System.out.println("教学生知识!");
}
}

执行结果
设计模式——工厂方法模式
上面的核心工厂PersonWorkFactory不负责产品对象的创建工作,是一个抽象工厂的角色,只负责具体工厂子类实现的接口,这样抽象化的好处使得系统在不修改具体工厂角色的情况下,可以引进新的产品,遵循开闭原则,提高了系统的可扩展性。

(四)优点
(1)使用工厂方法创建具体产品对象,隐藏了具体对象的创建细节,只需要关心具体产品对应的工厂
(2)遵循开闭原则,当加入新的产品类时,只需要同时加入相应的工厂类,实现扩展,无需修改原来的代码,提高了代码的可扩展性

参考博客:https://www.cnblogs.com/chenxkang/p/6689631.html
https://www.cnblogs.com/chenpi/p/5141376.html#_label3