【设计模式】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 }

运行结果显示:

大学生打扫地面
大学生洗衣服
大学生去买米
================================
志愿者打扫地面
志愿者洗衣服
志愿者去买米
原文地址:https://www.cnblogs.com/cutter-point/p/5188042.html