zoukankan      html  css  js  c++  java
  • 设计模式-创建型模式

    工厂方法 

    概述
        定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。
    
     适用性
        1.当一个类不知道它所必须创建的对象的类的时候。
    
        2.当一个类希望由它的子类来指定它所创建的对象的时候。
    
        3.当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
    			
     参与者
        1.Product
          定义工厂方法所创建的对象的接口。
    
        2.ConcreteProduct
          实现Product接口。
    
        3.Creator
          声明工厂方法,该方法返回一个Product类型的对象。
          Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。
          可以调用工厂方法以创建一个Product对象。
    
        4.ConcreteCreator
          重定义工厂方法以返回一个ConcreteProduct实例。
    
      5.类图

      6.例子
        Product
    1 public interface Work {
    2 
    3     void doWork();
    4 }
    View Code
    ConcreteProduct
     1 public class StudentWork implements Work {
     2 
     3     public void doWork() {
     4         System.out.println("学生做作业!");
     5     }
     6 
     7 }
     8 public class TeacherWork implements Work {
     9 
    10     public void doWork() {
    11         System.out.println("老师审批作业!");
    12     }
    13 
    14 }
    View Code
    Creator
    1 public interface IWorkFactory {
    2 
    3     Work getWork();
    4 }
    View Code
    ConcreteCreator
     1 public class StudentWorkFactory implements IWorkFactory {
     2 
     3     public Work getWork() {
     4         return new StudentWork();
     5     }
     6 
     7 }
     8 public class TeacherWorkFactory implements IWorkFactory {
     9 
    10     public Work getWork() {
    11         return new TeacherWork();
    12     }
    13 
    14 }
    View Code
    Test
     1 public class Test {
     2 
     3     public static void main(String[] args) {
     4         IWorkFactory studentWorkFactory = new StudentWorkFactory();
     5         studentWorkFactory.getWork().doWork();
     6         
     7         IWorkFactory teacherWorkFactory = new TeacherWorkFactory();
     8         teacherWorkFactory.getWork().doWork();
     9     }
    10 
    11 }
    View Code
    Result
    1 学生做作业!
    2 老师审批作业!
    View Code
  • 相关阅读:
    fstat、stat和lstat 区别
    listen()函数中的SOMAXCONN含义
    #ifndef#define#endif的用法(整理)
    stdin和STDIN_FILENO的区别(转)
    S_ISREG等几个常见的宏
    *_t 数据类型
    IO模式精细讲解: MSG_DONTWAIT 、 MSG_WAITALL
    c标准函数库(查阅使用)
    stdint.h
    C# RichTextBox控件常用屬性和事件
  • 原文地址:https://www.cnblogs.com/xld21/p/9417080.html
Copyright © 2011-2022 走看看