1.概述
定義一個用于創建對象的接口,讓子類決定實例化哪一個類。FactoryMethod使一個類的實例化延遲到其子類
2.適用性
1)當一個類不知道它所必須創建的對象的類的時候
2)當一個類希望由它的子類來指定它所創建的對象的時候
3)當類將創建的對象的職責委托給多個幫助子類中的某一個,并且你希望將哪一個幫助子類是代理者這一信息局部化的時候
3.參與者
1)PRoduct 定義工廠方法所創建的對象的接口
2)ConcreteProduct 用于實現Product接口
3)Creator 聲明工廠方法,該方法返回一個Product類型的對象。Creator也可以定義一個工廠方法的缺省實現,它返回一個缺省的ConcreteProduct對象。可以調用工廠方法以創建一個Product對象
4)ConcreteCreator 重定義工廠方法以返回一個ConcreteProduct實例
例子:
product包:
1 package product;2 3 public interface Work {4 void doWork();5 }
concreteproduct包:
1 package concreteproduct; 2 3 import product.Work; 4 5 public class StudentWork implements Work { 6 7 @Override 8 public void doWork() { 9 System.out.println("學生在做作業");10 }11 12 }
1 package concreteproduct; 2 3 import product.Work; 4 5 public class TeacherWork implements Work { 6 7 @Override 8 public void doWork() { 9 System.out.println("老師批審作業");10 }11 12 }
creator包:
1 package creator;2 3 import product.Work;4 5 public interface IWorkFactory {6 Work getWork();7 }
concretecreator包:
1 package concretecreator; 2 3 import concreteproduct.StudentWork; 4 import product.Work; 5 import creator.IWorkFactory; 6 7 public class StudentWorkFactory implements IWorkFactory { 8 9 @Override10 public Work getWork() {11 // TODO Auto-generated method stub12 return new StudentWork();13 }14 15 }
1 package concretecreator; 2 3 import concreteproduct.TeacherWork; 4 import product.Work; 5 import creator.IWorkFactory; 6 7 public class TeacherWorkFactory implements IWorkFactory { 8 9 @Override10 public Work getWork() {11 // TODO Auto-generated method stub12 return new TeacherWork();13 }14 15 }
test包:
1 package test; 2 3 import concretecreator.StudentWorkFactory; 4 import concretecreator.TeacherWorkFactory; 5 import creator.IWorkFactory; 6 7 public class Test { 8 public static void main(String args[]){ 9 IWorkFactory studentWorkFactory = new StudentWorkFactory();10 studentWorkFactory.getWork().doWork();11 12 IWorkFactory teacherWorkFactory = new TeacherWorkFactory();13 teacherWorkFactory.getWork().doWork();14 }15 }
新聞熱點
疑難解答