工廠方法 定義一個用於創建對象的介面,讓子類決定實例化哪一個類。FactoryMethod使一個類的實例化延遲到其子類。 定義一個用於創建對象的介面,讓子類決定實例化哪一個類。FactoryMethod使一個類的實例化延遲到其子類。 適用性 1.當一個類不知道它所必須創建的對象的類的時候。 2.當一 ...
工廠方法
概述
定義一個用於創建對象的介面,讓子類決定實例化哪一個類。FactoryMethod使一個類的實例化延遲到其子類。
適用性
1.當一個類不知道它所必須創建的對象的類的時候。 2.當一個類希望由它的子類來指定它所創建的對象的時候。 3.當類將創建對象的職責委托給多個幫助子類中的某一個,並且你希望將哪一個幫助子類是代理者這一信息局部化的時候。
參與者
1.Product 定義工廠方法所創建的對象的介面。 2.ConcreteProduct 實現Product介面。 3.Creator 聲明工廠方法,該方法返回一個Product類型的對象。 Creator也可以定義一個工廠方法的預設實現,它返回一個預設的ConcreteProduct對象。 可以調用工廠方法以創建一個Product對象。 4.ConcreteCreator 重定義工廠方法以返回一個ConcreteProduct實例。
5.類圖
6.例子
Product
1 public interface Work { 2 3 void doWork(); 4 }View Code
ConcreteProduct
1 public class StudentWork implements Work { 2 3 public void doWork() { 4 System.out.println("學生做作業!"); 5 } 6 7 } 8 public class TeacherWork implements Work { 9 10 public void doWork() { 11 System.out.println("老師審批作業!"); 12 } 13 14 }View Code
Creator
1 public interface IWorkFactory { 2 3 Work getWork(); 4 }View Code
ConcreteCreator
1 public class StudentWorkFactory implements IWorkFactory { 2 3 public Work getWork() { 4 return new StudentWork(); 5 } 6 7 } 8 public class TeacherWorkFactory implements IWorkFactory { 9 10 public Work getWork() { 11 return new TeacherWork(); 12 } 13 14 }View Code
Test
1 public class Test { 2 3 public static void main(String[] args) { 4 IWorkFactory studentWorkFactory = new StudentWorkFactory(); 5 studentWorkFactory.getWork().doWork(); 6 7 IWorkFactory teacherWorkFactory = new TeacherWorkFactory(); 8 teacherWorkFactory.getWork().doWork(); 9 } 10 11 }View Code
Result
1 學生做作業! 2 老師審批作業!View Code