此例子是java的23種設計模式中的例子,很久以前就看了。今天下班看來部電影《戰狼》,看完了沒什麼事就翻了一下書,重溫了一次,以此做下筆記。
FactoryMethod工廠方法
定義一個用於創建對象的接口,讓子類決定實例化哪一個類。FactoryMethod使一個類的實例*延伸到其子類。
適用性
1、當一個類不知道它所必須創建的對象的類的時候。
2、當一個類希望由它的子類來指定它所創建的對象的時候。
3、當*將創建對象的職責委託給多個幫助*類中的某一個。並且*將希望哪一個
幫助子類是代理者這一信息局部化的時候。
參與者
1、Product
定義工廠方法所 創建的對象的接口。
2、ConcreteProduct
實現Product接口
3、Creator
聲明工廠方法,該方法返回一個Product類型的對象
Creator也可以定義一個工廠方法的缺省實現,它返回一個缺省的
ConcreteProduct對象。
可以調用工廠方法以創建一個Product對象。
4、ConcreteCreator
重定義工廠方法以返回一個ConcreteProduct實例。
類圖:
*roduct
package com.dsp;
public interface Work {
void doWork();
}
package com.dsp;
public class StudentWork implements Work {
@Override
public void doWork() {
System.out.println("學生做作業!");
}
}
package com.dsp;
public class TeacherWork implements Work {
@Override
public void doWork() {
System.out.println("老師審批作業!");
}
}
package com.dsp;
public interface IWorkFactory {
Work getWork();
}
package com.dsp;
public class StudentWorkFactory implements IWorkFactory {
@Override
public Work getWork() {
return new StudentWork();
}
}
package com.dsp;
public class TeacherWorkFactory implements IWorkFactory {
@Override
public Work getWork() {
return new TeacherWork();
}
}
package com.dsp;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
IWorkFactory studentWorkFactory = new StudentWorkFactory();
studentWorkFactory.getWork().doWork();
IWorkFactory teacherWorkFactory = new TeacherWorkFactory();
teacherWorkFactory.getWork().doWork();
}
}
控制檯輸出:
學生做作業!
老師審批作業!