工廠方法(FactoryMethod)
阿新 • • 發佈:2017-05-25
多個 family interface sys 實現 它的 ans sta 指定 概述:定義一個用於創建對象的接口,讓子類決定實例化哪一個類(使一個類的實例化延遲到其子類)
適用性:
舉例:
這樣做的目的和好處(也是多態性的好處):在需要進行產品更新時,主代碼 main 中不需要進行過多的修改,只需要添加或修改產品子類、工廠子類,然後在主代碼中進行相應子類對象的實例化代碼的添加和修改,後面實現的功能以及跟其他部分的關聯都不用做大的更新。
適用性:
- 當一個類不知道它必須創建的對象的類的時候
- 當一個類希望由它的子類來指定它所創建的對象的時候
- 當類將創建對象的職責委托給多個幫助子類中的某一個,並且你希望將“哪一個幫助子類是代理者”這一信息局部化的時候
舉例:
以上是標準的工廠設計模式,我的理解:
public class TestFactoryMethod {
public static void main(String[] args) {
IWorkFactory s = new StudentWorkFactory();
s.getWork().doWork();
IWorkFactory
t = new TeacherWorkFactory();t.getWork().doWork();
}
}
interface IWorkFactory {
Work getWork();
}
class StudentWorkFactory implements IWorkFactory{
@Override
public Work getWork() {
return new StudentWork();
}
}
class TeacherWorkFactory implements IWorkFactory{
@Override
public Work getWork() {
return
new TeacherWork();}
}
interface Work {
void doWork();
}
class StudentWork implements Work {
@Override
public void doWork() {
System.out.println("學生寫作業");
}
}
class TeacherWork implements Work {
@Override
public void doWork() {
System.out.println("老師改作業");
}
}
- Work 接口:定義了一類產品(比如蜂蜜柚子茶),這些產品都可以幹一種事(doWork():被飲用
- Work 實現類:幹這種事的結果各有不同(廠家不同,口味不一),後期可以添加具有這種特點的產品(其他廠家)。
- IWorkFactory 接口:定義了一類工廠,這些工廠都可以幹一種事(getWork():生產飲料)。
- IWorkFactory 實現類:不同廠家的工廠不一樣,後期可以在又有廠家開始做蜂蜜柚子茶了之後,添加這些新廠家的工廠。
這樣做的目的和好處(也是多態性的好處):在需要進行產品更新時,主代碼 main 中不需要進行過多的修改,只需要添加或修改產品子類、工廠子類,然後在主代碼中進行相應子類對象的實例化代碼的添加和修改,後面實現的功能以及跟其他部分的關聯都不用做大的更新。
工廠方法(FactoryMethod)