概述:
定义一个用于创建对象的接口,让子类决定实例化哪一个类(使一个类的实例化延迟到其子类)
适用性:
- 当一个类不知道它必须创建的对象的类的时候
- 当一个类希望由它的子类来指定它所创建的对象的时候
- 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将“哪一个帮助子类是代理者”这一信息局部化的时候
举例:
public class TestFactoryMethod {
public static void main(String[] args) {
IWorkFactory s = new StudentWorkFactory();
s.getWork().doWork();
IWorkFactory t = new TeacherWorkFactory();
t.getWork().doWork();
}
}
interface IWorkFactory {
Work getWork();
}
class StudentWorkFactory implements IWorkFactory{
@Override
public Work getWork() {
return new StudentWork();
}
}
class TeacherWorkFactory implements IWorkFactory{
@Override
public Work getWork() {
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("老师改作业");
}
}
以上是标准的工厂设计模式,我的理解:
- Work 接口:定义了一类产品(比如蜂蜜柚子茶),这些产品都可以干一种事(doWork():被饮用)。
- Work 实现类:干这种事的结果各有不同(厂家不同,口味不一),后期可以添加具有这种特点的产品(其他厂家)。
- IWorkFactory 接口:定义了一类工厂,这些工厂都可以干一种事(getWork():生产饮料)。
- IWorkFactory 实现类:不同厂家的工厂不一样,后期可以在又有厂家开始做蜂蜜柚子茶了之后,添加这些新厂家的工厂。
这样做的目的和好处(也是多态性的好处):在需要进行产品更新时,主代码 main 中不需要进行过多的修改,只需要添加或修改产品子类、工厂子类,然后在主代码中进行相应子类对象的实例化代码的添加和修改,后面实现的功能以及跟其他部分的关联都不用做大的更新。
时间: 2024-10-07 03:40:41