定義一個用於建立對象的接口,讓子類決定實例化哪個類。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 }
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 }
Creator
1 public interface IWorkFactory { 2 3 Work getWork(); 4 }
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 }
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 }
Result
1 學生作做業! 2 老師審批做業!