工廠方法模式:乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。
工廠方法克服了簡單工廠違反開發-封閉原則的缺點,既保持了封裝物件建立過程的優點。
工廠方法模式實現時,客戶端需要決定例項化哪乙個工廠來實現運算類,選擇判斷的問題還是存在的,也就是說工廠方法把簡單工廠的內部邏輯判斷轉移到了客戶端**中進行。你想要加功能,本來是改工廠類的而現在是修改客戶端。
creator:工廠類介面,將建立各個產品的具體的工廠抽象出來成乙個介面。
concretecreateor:具體的工廠類,不同的工廠類建立不同的產品。
product:產品的介面,將各個產品抽象出來成乙個抽象類。
concreteproduct:具體的產品。
還是和上篇的簡單工廠模式是同乙個例項。
實現乙個計算器程式,要求輸入兩個數和運算符號,得到結果。
類圖:
編碼實現:
ifactory介面:
將加減乘除運算類的各個工廠類抽象成乙個抽象工廠類。
public
inte***ce ifactory
加法工廠類:
public
class
addfactory
implements
ifactory
}
減法工廠類:
public
class
subfactory
implements
ifactory
}
乘法工廠類:
public
class
mulfactory
implements
ifactory
}
除法工廠類:
public
class
divfactory
implements
ifactory
}
操作抽象類:
public
abstract
class operation
public
void
setnumbera(double numbera)
public
double
getnumberb()
public
void
setnumberb(double numberb)
public
abstract
double
getresult();
}
加法操作類:
public
class
operationadd
extends
operation
}
減法操作類:
public
class
operationsub
extends
operation
}
乘法操作類:
public
class
operationmul
extends
operation
}
除法操作類:
public
class
operationdiv
extends
operation catch (exception e)
}double result = numbera/numberb;
return result;}}
客戶端**:
public
class client
}
和簡單工廠模式相比較,克服每次擴充套件時需要更改簡單工廠類的缺點(克服了簡單工廠類違反了開閉-原則的缺點),但是現在客戶端需要知道更多的類。之前客戶端只需要知道簡單工廠類、抽象產品類。現在需要知道抽象工廠類、具體工廠類、抽象產品類。多了乙個具體產品類。之前在簡單的判斷邏輯轉移到了客戶端中,由客戶端選擇例項化哪乙個工廠類 。
客戶端需要知道的類
抽象工廠類、具體工廠類、抽象產品類
通常建立型模式的設計是從工廠方法開始,當設計者發現需要更大的靈活性時,設計便會向其他設計模式演化。
工廠方法模式 工廠方法模式 二
工廠方法模式是對簡單工廠的進一步抽象和封裝,需要新的類物件時不需要對既有工廠類進行修改,而是增加新的工廠類。工程類可以使用模版進一步封裝,由編譯器來生成 從而減少 編寫工作量。工廠方法的 c 實現01part產品抽象基類class animal virtual void show 0 02part產...
工廠模式二 工廠方法模式
使用者只需要關心產品對應的工廠,不需要關心建立細節。例如貓和狗都屬於動物一類,都具有吃飯這個功能。先定義介面ianimal public inte ce ianimal實現介面ianimal介面cat類和dog類 public class cat implements ianimal public ...
工廠方法模式 工廠方法模式
工廠方法模式是簡單工廠模式的公升級版,簡單工廠模式不符合設計模式的原則 即 單一職責,開閉原則 優點 職責明確,擴充套件方便 缺點 需要建立多個工廠 實現步驟 1.將工廠通用方法抽取介面 例如 ifactory 2.將產品抽取介面 例如 icar 3.實現各種產品 例如 baomacar,benti...