zoukankan      html  css  js  c++  java
  • 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. 经理审批流程!  
  • 相关阅读:
    基于Jquery+Ajax+Json+高效分页
    前端购物车框架(精髓篇)
    基于C#操作Word文档中的Bookmark
    C# 方法中的this参数
    Asp.Net 全局变量
    winform 多表头的实现
    2012年2月
    在UpdatePanel上使用FileUpload上传文件(转载)
    2011年总结和2012年计划
    javascript备注
  • 原文地址:https://www.cnblogs.com/huangwentian/p/7471580.html
Copyright © 2011-2022 走看看