設計模式-建立型模式#工廠方法FactoryMethod
阿新 • • 發佈:2019-01-29
此例子是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();
}
ConcreteProductpackage com.dsp;
public class StudentWork implements Work {
@Override
public void doWork() {
System.out.println("學生做作業!");
}
}
Creatorpackage 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();
}
}
ConcreteCreator測試類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();
}
}
控制檯輸出:
學生做作業!
老師審批作業!