模式结构:
实现:
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 }
运行结果显示:
大学生打扫地面 大学生洗衣服 大学生去买米 ================================ 志愿者打扫地面 志愿者洗衣服 志愿者去买米