GoF23种设计模式之创建型模式之工厂方法模式

一、概述

        定义一个用于创建对象的接口,让子类去决定实例化哪个类。工厂方法将一个类的实例化延迟至其子类。

二、适用性

1.当一个类不知道它所必须创建的对象的类的时候。

2.当一个类希望由其子类来指定它所创建的对象的时候。

3.当类将创建对象的职责委托给多个帮助子类的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

三、参与者

1.Product:定义工厂方法所创建的对象的接口。

2.ConcreteProduct:实现Product接口。

3.Creator:声明工厂方法,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。

4.ConcreteCreator:重定义工厂方法以返回一个ConcreteProduct实例。

四、类图

五、示例

Product

[java] view plain copy
 
 print?
  1. package cn.lynn.factorymethod;  
  2.   
  3. public interface IWork {  
  4.   
  5.     public void doWork();  
  6.   
  7. }  

ConcreteProduct

[java] view plain copy
 
 print?
  1. package cn.lynn.factorymethod;  
  2.   
  3. public class ManagerWork implements IWork {  
  4.   
  5.     @Override  
  6.     public void doWork() {  
  7.         System.out.println("经理审批流程!");  
  8.     }  
  9.   
  10. }  
[java] view plain copy
 
 print?
  1. package cn.lynn.factorymethod;  
  2.   
  3. public class EmployeeWork implements IWork {  
  4.   
  5.     @Override  
  6.     public void doWork() {  
  7.         System.out.println("员工处理事情!");  
  8.     }  
  9.   
  10. }  

Creator

[java] view plain copy
 
 print?
  1. package cn.lynn.factorymethod;  
  2.   
  3. public interface IWorkFactory {  
  4.   
  5.     public IWork getWork();  
  6.   
  7. }  

ConcreteCreator

[java] view plain copy
 
 print?
  1. package cn.lynn.factorymethod;  
  2.   
  3. public class ManagerWorkFactory implements IWorkFactory {  
  4.   
  5.     @Override  
  6.     public IWork getWork() {  
  7.         return new ManagerWork();  
  8.     }  
  9.   
  10. }  
[java] view plain copy
 
 print?
  1. package cn.lynn.factorymethod;  
  2.   
  3. public class EmployeeWorkFactory implements IWorkFactory {  
  4.   
  5.     @Override  
  6.     public IWork getWork() {  
  7.         return new EmployeeWork();  
  8.     }  
  9.   
  10. }  

Test

[java] view plain copy
 
 print?
  1. package cn.lynn.factorymethod;  
  2.   
  3. public class Test {  
  4.   
  5.     public static void main(String[] args) {  
  6.         IWorkFactory employeeWorkFactory = new EmployeeWorkFactory();  
  7.         employeeWorkFactory.getWork().doWork();  
  8.           
  9.         IWorkFactory managerWorkFactory = new ManagerWorkFactory();  
  10.         managerWorkFactory.getWork().doWork();  
  11.     }  
  12.   
  13. }  

Result

[java] view plain copy
 
 print?
    1. 员工处理事情!  
    2. 经理审批流程!  
原文地址:https://www.cnblogs.com/huangwentian/p/7471580.html