首页 > 代码库 > 工厂方法(FactoryMethod)

工厂方法(FactoryMethod)

概述:
定义一个用于创建对象的接口,让子类决定实例化哪一个类(使一个类的实例化延迟到其子类)

适用性:
  1. 当一个类不知道它必须创建的对象的类的时候
  2. 当一个类希望由它的子类来指定它所创建的对象的时候
  3. 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将“哪一个帮助子类是代理者”这一信息局部化的时候

举例:
  1. public class TestFactoryMethod {
  2. public static void main(String[] args) {
  3. IWorkFactory s = new StudentWorkFactory();
  4. s.getWork().doWork();
  5. IWorkFactory t = new TeacherWorkFactory();
  6. t.getWork().doWork();
  7. }
  8. }
  9. interface IWorkFactory {
  10. Work getWork();
  11. }
  12. class StudentWorkFactory implements IWorkFactory{
  13. @Override
  14. public Work getWork() {
  15. return new StudentWork();
  16. }
  17. }
  18. class TeacherWorkFactory implements IWorkFactory{
  19. @Override
  20. public Work getWork() {
  21. return new TeacherWork();
  22. }
  23. }
  24. interface Work {
  25. void doWork();
  26. }
  27. class StudentWork implements Work {
  28. @Override
  29. public void doWork() {
  30. System.out.println("学生写作业");
  31. }
  32. }
  33. class TeacherWork implements Work {
  34. @Override
  35. public void doWork() {
  36. System.out.println("老师改作业");
  37. }
  38. }
以上是标准的工厂设计模式,我的理解:
  • Work 接口:定义了一类产品(比如蜂蜜柚子茶),这些产品都可以干一种事(doWork():被饮用)。
  • Work 实现类:干这种事的结果各有不同(厂家不同,口味不一),后期可以添加具有这种特点的产品(其他厂家)。
  • IWorkFactory 接口:定义了一类工厂,这些工厂都可以干一种事(getWork():生产饮料)。
  • IWorkFactory 实现类:不同厂家的工厂不一样,后期可以在又有厂家开始做蜂蜜柚子茶了之后,添加这些新厂家的工厂。

这样做的目的和好处(也是多态性的好处):在需要进行产品更新时,主代码 main 中不需要进行过多的修改,只需要添加或修改产品子类、工厂子类,然后在主代码中进行相应子类对象的实例化代码的添加和修改,后面实现的功能以及跟其他部分的关联都不用做大的更新。

工厂方法(FactoryMethod)