国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

設計模式(8)---橋接模式

2019-11-14 16:21:58
字體:
來源:轉載
供稿:網友

定義:

橋接模式:將抽象部分與它的實現部分分離,使它們都可以獨立地變化。

解釋:抽象與它的實現分離并不是說讓抽象類與其派生類分離,而是抽象類和它的派生類用來實現自己的對象。

 

UML類圖和基本代碼:

class PRogram    {        static void Main(string[] args)        {            Abstration ab = new RefinedAbstration();            ab.SetImplementor (new ConcreteImplementorA ());            ab.Operation();            ab.SetImplementor(new ConcreteImplementorB());            ab.Operation();            Console.Read();        }    }    abstract class Implementor    {        public abstract void Operation();    }    class ConcreteImplementorA : Implementor    {        public override void Operation()        {            Console.WriteLine("implement A action");        }    }    class ConcreteImplementorB : Implementor    {        public override void Operation()        {            Console.WriteLine("implement B action");        }    }    class Abstration    {        protected Implementor implementor;        public void SetImplementor(Implementor implementor)        {            this.implementor = implementor;        }        public virtual void Operation()        {            implementor.Operation();        }    }    class RefinedAbstration : Abstration    {        public override void Operation()        {            implementor.Operation();        }    }
View Code

 

在網上看到一個實例,感覺非常貼切,”拿來主義“參考學習。

具體是:現實生活中實現遙控器,遙控器中并不包含開機、關機、換臺等功能的實現,遙控器只是包含了電視機上的這些功能的引用,然后紅外線去找到電視機上對應功能的實現。

抽象類電視機及生成長虹、三星電視機:

public abstract class TV    {        public abstract void On();        public abstract void Off();        public abstract void TurnChannel();    }    public class ChangHong : TV    {        public override void On()        {            Console.WriteLine("長虹牌電視機已經打開了");        }        public override void Off()        {            Console.WriteLine("長虹牌電視機已經關掉了");        }        public override void TurnChannel()        {            Console.WriteLine("長虹牌電視機換頻道");        }    }    public class Samsung : TV    {        public override void On()        {            Console.WriteLine("三星牌電視機已經打開了");        }        public override void Off()        {            Console.WriteLine("三星牌電視機已經關掉了");        }        public override void TurnChannel()        {            Console.WriteLine("三星牌電視機換頻道");        }    }
View Code

 

 抽象類遙控器及實現:

public class RemoteControl    {        private TV implementor;        public TV Implementor        {            get { return implementor; }            set { implementor = value; }        }        public virtual void On()        {            implementor.On();        }        public virtual void Off()        {            implementor.Off();        }        public virtual void TurnChannel()        {            implementor.TurnChannel();        }    }    public class ConcreteRemote : RemoteControl    {            }
View Code

 

客戶端調用:

RemoteControl remoteControl = new ConcreteRemote();            remoteControl.Implementor = new ChangHong();            remoteControl.On();            remoteControl.Off();            remoteControl.TurnChannel();

 

優點:

抽象接口與實現解耦。

抽象和實現都可以獨立擴展,不會影響到對方。

缺點:

增加了系統的復雜度。

 

適用場景:

一個類存在兩個獨立變化的維度,且兩個維度都需要進行擴展。

需要跨越多個平臺的圖形和窗口系統。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 康马县| 武山县| 凤翔县| 盐城市| 嘉善县| 宁夏| 班戈县| 措美县| 泾源县| 铁力市| 玉树县| 绍兴市| 应用必备| 东乡县| 上蔡县| 泌阳县| 中牟县| 江山市| 泰和县| 吴川市| 德兴市| 吴忠市| 南皮县| 灵山县| 绍兴市| 闽侯县| 明星| 阜宁县| 曲阳县| 宁都县| 湖北省| 登封市| 孙吴县| 洮南市| 灌阳县| 宜昌市| 施秉县| 松桃| 九江市| 玉门市| 开化县|