• 设计模式——工厂方法


    工厂方法
     概述
        定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。
     适用性
        1.当一个类不知道它所必须创建的对象的类的时候。

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

        3.当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
     参与者
        1.Product
          定义工厂方法所创建的对象的接口。

        2.ConcreteProduct
          实现Product接口。

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

        4.ConcreteCreator
          重定义工厂方法以返回一个ConcreteProduct实例。
     类图2012年4月17日11:39:56
     
    Title

     
     例子
    Product 
    public interface Work {

        void doWork();
    }
    ConcreteProduct 
    public class StudentWork implements Work {

        public void doWork() {
            System.out.println("学生做作业!");
        }

    }
    public class TeacherWork implements Work {

        public void doWork() {
            System.out.println("老师审批作业!");
        }

    }
    Creator 
    public interface IWorkFactory {

        Work getWork();
    }
    ConcreteCreator 
    public class StudentWorkFactory implements IWorkFactory {

        public Work getWork() {
            return new StudentWork();
        }

    }
    public class TeacherWorkFactory implements IWorkFactory {

        public Work getWork() {
            return new TeacherWork();
        }

    }
    Test 
    public class Test {

        public static void main(String[] args) {
            IWorkFactory studentWorkFactory = new StudentWorkFactory();
            studentWorkFactory.getWork().doWork();
            
            IWorkFactory teacherWorkFactory = new TeacherWorkFactory();
            teacherWorkFactory.getWork().doWork();
        }

    }
    result 
    学生做作业!
    老师审批作业!
    允许自由传播,但请保留页脚版权信息
    Copyright © 2008 Angus Young
    疯狂Java联盟:http://www.crazyjava.org 
  • 相关阅读:
    time 模块学习
    day 14 自定义模块,常用模块 time .datetime ,time 模块
    day 13 课后作业
    day 12 课后作业
    day 11课后作业
    树状数组最值
    hdu 1059 Dividing bitset 多重背包
    XVII Open Cup named after E.V. Pankratiev. XXI Ural Championship
    最长公共子序列板/滚动 N^2
    Uva 10635
  • 原文地址:https://www.cnblogs.com/alamps/p/2453386.html
Copyright © 2020-2023  润新知