首頁  >  文章  >  後端開發  >  從0自學C#09--抽象工廠模式實例

從0自學C#09--抽象工廠模式實例

黄舟
黄舟原創
2017-02-04 10:52:461587瀏覽

1.適用環境

(主要是用在生產製造多種產品,軟體有多種皮膚,多種資料庫等環境)

  • 一個系統不應依賴產品類實例如何被創建、組合和表達的細節,這對於所有類型的工廠模式都是重要的。

  • 系統中有多於一個的產品族,而每次只使用其中某一產品族。

  • 屬於同一個產品族的產品將在一起使用,這一約束必須在系統的設計中體現出來。

  • 系統提供一個產品類別的庫,所有的產品以同樣的介面出現,從而使客戶端不依賴於具體實現

2.模式定義

抽象工廠模式(Abstract Factory Pattern

2.模式定義

抽象工廠模式(Abstract Factory Pattern

2.模式定義

    抽象工廠模式(Abstract Factory Pattern
  • 2.模式定義

    抽象工廠模式(Abstract Factory Pattern):提供一個建立一系列相關或相互依賴物件的接口,而無須指定它們具體的類別。抽象工廠模式又稱為Kit模式,屬於物件創建型模式。
  • 3.模式結構

    抽象工廠模式包含以下角色:
  • AbstractFactory:抽象工廠
  • ConcreteFactory:特定工廠

    ConcreteFactory:具體工廠
  • 產品
  • 為了更清楚地理解工廠方法模式,需要先引入兩個概念:

從0自學C#09--抽象工廠模式實例產品等級結構:產品等級結構即產品的繼承結構,如一個抽象類別是電視機,其子類別有海爾電視機、海信電視機、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...
🎜點膠介面🎜rrreee🎜合主自家實例。 ,更多相關內容請關注PHP中文網(www.php.cn)! 🎜🎜🎜🎜
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn