你的位置:首页 > ASP.net教程

[ASP.net教程]【设计模式】3、工厂方法模式


模式结构:

 

实现:

 1 package com.shejimoshi.create.FactoryMethod; 2  3  4 /** 5  * 功能:工厂方法模式 6  *     意图 : 7  *       定义一个用于创建对象的接口,让子类决定实例化哪一个类。 8  *     适用性: 9  *       当一个类不知道它所必须创建的对象的类的时候10  *       当一个类希望由他的子类来指定它所创建的对象的时候11  *       当类将创建对象职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候12  *     定义工厂方法所创建的对象的接口13  * 时间:2016年2月13日下午3:53:2414  * 作者:cutter_point15 */16 public class LeiFeng17 {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:2414  * 作者:cutter_point15 */16 public class Undergraduate extends LeiFeng17 {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:2414  * 作者:cutter_point15 */16 public class Volunteer extends LeiFeng17 {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:1814  * 作者:cutter_point15 */16 public interface IFactory17 {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:5214  * 作者:cutter_point15 */16 public class UndergraduateFactory implements IFactory17 {18 19   @Override20   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:2614  * 作者:cutter_point15 */16 public class VolunteerFactory implements IFactory17 {18 19   @Override20   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:0813  * 作者:cutter_point14 */15 public class Test16 {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 }

 

运行结果显示:

大学生打扫地面大学生洗衣服大学生去买米================================志愿者打扫地面志愿者洗衣服志愿者去买米