zoukankan      html  css  js  c++  java
  • 【设计模式】3、工厂方法模式

    模式结构:

    实现:

     1 package com.shejimoshi.create.FactoryMethod;
     2 
     3 
     4 /**
     5  * 功能:工厂方法模式
     6  *         意图 :
     7  *             定义一个用于创建对象的接口,让子类决定实例化哪一个类。
     8  *         适用性:
     9  *             当一个类不知道它所必须创建的对象的类的时候
    10  *             当一个类希望由他的子类来指定它所创建的对象的时候
    11  *             当类将创建对象职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候
    12  *         定义工厂方法所创建的对象的接口
    13  * 时间:2016年2月13日下午3:53:24
    14  * 作者:cutter_point
    15  */
    16 public class LeiFeng
    17 {
    18     public void sweep()
    19     {
    20         System.out.println("雷锋打扫地面");
    21     }
    22     
    23     public void wash()
    24     {
    25         System.out.println("雷锋洗衣服");
    26     }
    27     
    28     public void buyRice()
    29     {
    30         System.out.println("雷锋去买米");
    31     }
    32 }
     1 package com.shejimoshi.create.FactoryMethod;
     2 
     3 
     4 /**
     5  * 功能:工厂方法模式
     6  *         意图 :
     7  *             定义一个用于创建对象的接口,让子类决定实例化哪一个类。
     8  *         适用性:
     9  *             当一个类不知道它所必须创建的对象的类的时候
    10  *             当一个类希望由他的子类来指定它所创建的对象的时候
    11  *             当类将创建对象职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候
    12  *         定义大学生志愿者类
    13  * 时间:2016年2月13日下午4:16:24
    14  * 作者:cutter_point
    15  */
    16 public class Undergraduate extends LeiFeng
    17 {
    18     public void sweep()
    19     {
    20         System.out.println("大学生打扫地面");
    21     }
    22     
    23     public void wash()
    24     {
    25         System.out.println("大学生洗衣服");
    26     }
    27     
    28     public void buyRice()
    29     {
    30         System.out.println("大学生去买米");
    31     }
    32 }
     1 package com.shejimoshi.create.FactoryMethod;
     2 
     3 
     4 /**
     5  * 功能:工厂方法模式
     6  *         意图 :
     7  *             定义一个用于创建对象的接口,让子类决定实例化哪一个类。
     8  *         适用性:
     9  *             当一个类不知道它所必须创建的对象的类的时候
    10  *             当一个类希望由他的子类来指定它所创建的对象的时候
    11  *             当类将创建对象职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候
    12  *         定义志愿者类
    13  * 时间:2016年2月13日下午4:17:24
    14  * 作者:cutter_point
    15  */
    16 public class Volunteer extends LeiFeng
    17 {
    18     public void sweep()
    19     {
    20         System.out.println("志愿者打扫地面");
    21     }
    22     
    23     public void wash()
    24     {
    25         System.out.println("志愿者洗衣服");
    26     }
    27     
    28     public void buyRice()
    29     {
    30         System.out.println("志愿者去买米");
    31     }
    32 }
     1 package com.shejimoshi.create.FactoryMethod;
     2 
     3 
     4 /**
     5  * 功能:工厂方法模式
     6  *         意图 :
     7  *             定义一个用于创建对象的接口,让子类决定实例化哪一个类。
     8  *         适用性:
     9  *             当一个类不知道它所必须创建的对象的类的时候
    10  *             当一个类希望由他的子类来指定它所创建的对象的时候
    11  *             当类将创建对象职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候
    12  *         声明工厂方法
    13  * 时间:2016年2月13日下午4:18:18
    14  * 作者:cutter_point
    15  */
    16 public interface IFactory
    17 {
    18     public LeiFeng createLeiFeng();
    19 }
     1 package com.shejimoshi.create.FactoryMethod;
     2 
     3 
     4 /**
     5  * 功能:工厂方法模式
     6  *         意图 :
     7  *             定义一个用于创建对象的接口,让子类决定实例化哪一个类。
     8  *         适用性:
     9  *             当一个类不知道它所必须创建的对象的类的时候
    10  *             当一个类希望由他的子类来指定它所创建的对象的时候
    11  *             当类将创建对象职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候
    12  *         从定义工厂方法返回一个相应的实例
    13  * 时间:2016年2月13日下午4:19:52
    14  * 作者:cutter_point
    15  */
    16 public class UndergraduateFactory implements IFactory
    17 {
    18 
    19     @Override
    20     public LeiFeng createLeiFeng()
    21     {
    22         return new Undergraduate();
    23     }
    24 
    25 }
     1 package com.shejimoshi.create.FactoryMethod;
     2 
     3 
     4 /**
     5  * 功能:工厂方法模式
     6  *         意图 :
     7  *             定义一个用于创建对象的接口,让子类决定实例化哪一个类。
     8  *         适用性:
     9  *             当一个类不知道它所必须创建的对象的类的时候
    10  *             当一个类希望由他的子类来指定它所创建的对象的时候
    11  *             当类将创建对象职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候
    12  *         从定义工厂方法返回一个相应的实例
    13  * 时间:2016年2月13日下午4:21:26
    14  * 作者:cutter_point
    15  */
    16 public class VolunteerFactory implements IFactory
    17 {
    18 
    19     @Override
    20     public LeiFeng createLeiFeng()
    21     {
    22         return new Volunteer();
    23     }
    24 
    25 }
     1 package com.shejimoshi.create.FactoryMethod;
     2 
     3 
     4 /**
     5  * 功能:工厂方法模式
     6  *         意图 :
     7  *             定义一个用于创建对象的接口,让子类决定实例化哪一个类。
     8  *         适用性:
     9  *             当一个类不知道它所必须创建的对象的类的时候
    10  *             当一个类希望由他的子类来指定它所创建的对象的时候
    11  *             当类将创建对象职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候
    12  * 时间:2016年2月13日下午4:22:08
    13  * 作者:cutter_point
    14  */
    15 public class Test
    16 {
    17     
    18     public static void useFactoryMethod(IFactory factory)
    19     {
    20         LeiFeng leifeng = factory.createLeiFeng();
    21         leifeng.sweep();
    22         leifeng.wash();
    23         leifeng.buyRice();
    24     }
    25     
    26     public static void main(String[] args)
    27     {
    28         IFactory if1 = new UndergraduateFactory();
    29         IFactory if2 = new VolunteerFactory();
    30         useFactoryMethod(if1);
    31         System.out.println("================================");
    32         useFactoryMethod(if2);
    33     }
    34 
    35 }

    运行结果显示:

    大学生打扫地面
    大学生洗衣服
    大学生去买米
    ================================
    志愿者打扫地面
    志愿者洗衣服
    志愿者去买米
  • 相关阅读:
    Sentinel实现熔断和限流
    Nacos 服务注册和配置中心
    SpringCloud Sleuth 分布式请求链路跟踪
    SpringCloud Stream消息驱动
    SpringCloud Bus消息总线
    SpringCloud Config分布式配置中心
    Geteway服务网关
    Hystrix断路器
    libecc:一个可移植的椭圆曲线密码学库
    第四十二个知识点:看看你的C代码为蒙哥马利乘法,你能确定它可能在哪里泄漏侧信道路吗?
  • 原文地址:https://www.cnblogs.com/cutter-point/p/5188042.html
Copyright © 2011-2022 走看看