一、完成者資訊:
姓名:韋慶
學號:07770104
二、模式資訊
模式名稱:簡單工廠模式
模式概述:
簡單工廠模式的實質是由乙個工廠類根據傳入的參量,動態決定應該建立出哪乙個產品類的例項。簡單工廠模式涉及到工廠角色、抽象產品角色和具體產品角色三個參與者。
● 工廠(creator)角色
是簡單工廠模式的核心,它負責實現建立所有例項的內部邏輯。工廠類可以被外界直接呼叫,建立所需的產品物件。
● 抽象產品(product)角色
是簡單工廠模式所建立的所有物件的父類,它負責描述所有例項所共有的公共介面。
● 具體產品(concrete product)角色
是簡單工廠模式的建立目標,所有建立的物件都是充當這個角色的某個具體類的例項。
定義:
專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。
生活場景:
在支付寶充值時有多種銀行可供選擇,包括農行、建行、工行等,我們現在需要選擇其中乙個銀行給支付寶充值。那該如何實現更好呢?
終極目標:選擇銀行給支付寶充值,實現封裝變化點的目的。
1.不假思索的思路:
宣告乙個銀行類,定義乙個成員函式,該成員函式處理所有的充值情況。
實現**:
public class bank
public void process(string type)
switch (type)
case "中國農業銀行":
console.writeline("使用中國農業銀行支付");
break;
case "中國建設銀行":
console.writeline("使用中國建設銀行支付");
break;
case "中國工商銀行":
console.writeline("使用中國工商銀行支付");
break;
class program
static void main(string args)
bank b = new bank();
b.process("中國農業銀行");
console.readline();
使用這種方式當你將來需要增加其他充值方式,例如天津銀行,就需要手動維護這段switch語句,這種長篇**的維護工作會浪費很多時間。
2.歸納階段
針對上述問題如果能夠使用簡單工廠模式,通過簡單工廠類定義apm的抽象類,該類定義處理方法,具體子類通過繼承抽象類的方法來實現處理過程,這樣,增加其他apm就變得容易了,**頁更清晰。如下圖:
實現**:
///
/// 抽象充值方式類
///
public abstract class apm
public abstract void process();
///
/// 具體子類,農行
///
public class nh : apm
public override void process()
console.writeline("使用中國農業銀行支付");
///
/// 具體子類,建行
///
public class jh : apm
public override void process()
console.writeline("使用中國建設銀行支付");
public class apmfactory
public apm createapm(string type)
switch (type)
case "中國農業銀行":
return new nh();
case "中國建設銀行":
return new jh();
default:
return null;
class program
static void main(string args)
apm apm;
apmfactory apmfactory = new apmfactory();
apm = apmfactory.createapm("中國農業銀行");
apm.process();
apm = apmfactory.createapm("中國建設銀行");
apm.process();
console.readline();
到此想要增加乙個充值方式只要在宣告乙個具體子類即可,而不需要在switch中維護大量的邏輯**。
3.驗證階段:
當前目標:新增乙個新的充值銀行,如天津銀行。
結果為:
實現**:
///
/// 抽象充值方式類
///
public abstract class apm
public abstract void process();
///
/// 具體子類,農行
///
public class nh : apm
public override void process()
console.writeline("使用中國農業銀行支付");
///
/// 具體子類,建行
///
public class jh : apm
public override void process()
console.writeline("使用中國建設銀行支付");
public class tj : apm
public override void process()
console.writeline("使用天津銀行支付");
public class apmfactory
public apm createapm(string type)
switch (type)
case "中國農業銀行":
return new nh();
case "中國建設銀行":
return new jh();
case "天津銀行":
return new tj();
default:
return null;
class program
static void main(string args)
apm apm;
apmfactory apmfactory = new apmfactory();
apm = apmfactory.createapm("中國農業銀行");
apm.process();
apm = apmfactory.createapm("中國建設銀行");
apm.process();
apm = apmfactory.createapm("天津銀行");
apm.process();
console.readline();
4、抽象階段:
思路描述:專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。
類結構圖:
工廠模式04
一 完成者資訊 姓名 韋慶 學號 07770104 二 模式資訊 模式名稱 工廠模式 模式概述 當系統準備為使用者提供某個類的子類的例項,又不想讓使用者 和該子類形成耦合時,就可以使用工廠方法模式來設計系統。工廠方法模式的關鍵是在乙個介面或抽象類中定義乙個抽象方法,該方法返回某個類的子類例項,該抽象...
設計模式04 抽象工廠模式
抽象工廠模式是物件的建立模式,它是工廠方法模式的進一步推廣。抽象工廠模式與工廠方法模式的最大差別就在於工廠方法模式針對的是乙個產品等級結構 而抽象工廠模式則須要面對多個產品等級結構。如果乙個子系統須要一些產品物件,而這些產品又屬於乙個以上的產品等級結構。那麼為了將消費這些產品物件的責任和建立這些產品...
工廠模式 簡單工廠
簡單工廠其實並不是乙個設計模式,反而比較像一種程式設計習慣。我個人的這樣總結簡單工廠 建立乙個類,封裝建立物件的 故事 現在我要開一家披薩店,叫bbk 必敗客 披薩,賣很多種披薩 芝士披薩 榴蓮披薩等等,我有乙個orderpizza string type 方法,根據客戶傳來的type來提供不同的披...