模式結構: 實現: 1 package com.shejimoshi.create.FactoryMethod; 2 3 4 /** 5 * 功能:工廠方法模式 6 * 意圖 : 7 * 定義一個用於創建對象的介面,讓子類決定實例化哪一個類。 8 * 適用性: 9 * 當一個類不知道它所必須創建的對
模式結構:
實現:
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 }
運行結果顯示:
大學生打掃地面 大學生洗衣服 大學生去買米 ================================ 志願者打掃地面 志願者洗衣服 志願者去買米