1.適用環境
(主要是用在生產製造多種產品,軟體有多種皮膚,多種資料庫等環境)
一個系統不應當依賴於產品類執行個體如何被建立、組合和表達的細節,這對於所有類型的原廠模式都是重要的。
系統中有多於一個的產品族,而每次只使用其中某一產品族。
屬於同一個產品族的產品將在一起使用,這一約束必須在系統的設計中體現出來。
系統提供一個產品類的庫,所有的產品以同樣的介面出現,從而使用戶端不依賴於具體實現
2.模式定義
抽象原廠模式(Abstract Factory Pattern):提供一個建立一系列相關或相互依賴對象的介面,而無須指定它們具體的類。抽象原廠模式又稱為Kit模式,屬於對象建立型模式。
3.模式結構
抽象原廠模式包含如下角色:
AbstractFactory:抽象工廠
ConcreteFactory:具體工廠
AbstractProduct:抽象產品
Product:具體產品
為了更清晰地理解Factory 方法模式,需要先引入兩個概念:
產品等級結構:產品等級結構即產品的繼承結構,如一個抽象類別是電視機,其子類有海爾電視機、海信電視機、TCL電視機,則抽象電視機與具體品牌的電視機之間構成了一個產品等級結構,抽象電視機是父類,而具體品牌的電視機是其子類。
產品族 :在抽象原廠模式中,產品族是指由同一個工廠生產的,位於不同產品等級結構中的一組產品,如海爾電器工廠生產的海爾電視機、海爾電冰箱,海爾電視機位於電視機產品等級結構中,海爾電冰箱位於電冰箱產品等級結構中。
4.代碼
流程介面
interface IFlow { IRxAlign CreateRxAlign(); IDispensing CreateDispensing(); }class FlowA : IFlow { public IRxAlign CreateRxAlign() { return new RxAlignA(); } public IDispensing CreateDispensing() { return new DispensingA(); } }class FlowB : IFlow { public IRxAlign CreateRxAlign() { return new RxAlignB(); } public IDispensing CreateDispensing() { return new DispensingB(); } }
耦合介面
interface IRxAlign { event LocationChange LocChange; int[] RoPulse { set; get; } int[] FiPulse { set; get; } int[] RoMaxStep { set; get; } double[] RoRESTarget { set; get; } double[] TxP { set; get; } double[] RESmin { set; get; } double[] RESmax { set; get; } Coordinate Location { set; get; } void LoadPara(string PN); void GoHome(); void Start(); void Stop(); }class RxAlignA : IRxAlign { private ControlCard card; private QSFP28 product; private double RESmax, RESmin, RES; private double[] TxPower; public RxAlignA() { this.RESmax = 1.0; this.RESmin = 0.4; } public bool ConfigPara() { try { this.card = new ControlCard(); this.product = new QSFP28(); return true; } catch { return false; } } public void GoHome() { //QSFP28 go home } public void Start() { //QSFP28 start } public void Stop() { card = null; product = null; } ... }class RxAlignB : IRxAlign { private ControlCard card; private CFP4 product; private double RESmax, RESmin, RES; private double[] TxPower; public RxAlignB() { this.RESmax = 1.0; this.RESmin = 0.4; } public bool ConfigPara() { try { this.card = new ControlCard(); this.product = new CFP4(); return true; } catch { return false; } } public void GoHome() { //CFP4 go home } public void Start() { //CFP4 start } public void Stop() { card = null; product = null; } ... }
點膠介面
interface IDispensing { //code }class DispensingA : IDispensing { //code }class DispensingB : IDispensing { //code }
主線程調用
flow = new FlowA();align = flow.CreateRxAlign();align.LoadPara(this.comboBoxPN.Text);dispens = flow.CreateDispensing();dispens.//code...
以上就是 從0自學C#09--抽象原廠模式執行個體的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!