文章出處

/// <summary>
    /// 抽象概念中的遙控器,扮演抽象化角色
    /// </summary>
    public class RemoteControl
    {
        // 字段
        private TV implementor;

        // 屬性
        public TV Implementor
        {
            get { return implementor; }
            set { implementor = value; }
        }

        /// <summary>
        /// 開電視機,這里抽象類中不再提供實現了,而是調用實現類中的實現
        /// </summary>
        public virtual void On()
        {
            implementor.On();
        }

        /// <summary>
        /// 關電視機
        /// </summary>
        public virtual void Off()
        {
            implementor.Off();
        }

        /// <summary>
        /// 換頻道
        /// </summary>
        public virtual void SetChannel()
        {
            implementor.tuneChannel();
        }
    }

    /// <summary>
    /// 具體遙控器
    /// </summary>
    public class ConcreteRemote : RemoteControl
    {
        public override void SetChannel()
        {
            Console.WriteLine("---------------------");
            base.SetChannel();
            Console.WriteLine("---------------------");
        }
    }
/// <summary>
    /// 電視機,提供抽象方法
    /// </summary>
    public abstract class TV
    {
        public abstract void On();
        public abstract void Off();
        public abstract void tuneChannel();
    }

    /// <summary>
    /// 長虹牌電視機,重寫基類的抽象方法
    /// 提供具體的實現
    /// </summary>
    public class ChangHong : TV
    {
        public override void On()
        {
            Console.WriteLine("長虹牌電視機已經打開了");
        }

        public override void Off()
        {
            Console.WriteLine("長虹牌電視機已經關掉了");
        }

        public override void tuneChannel()
        {
            Console.WriteLine("長虹牌電視機換頻道");
        }
    }

    /// <summary>
    /// 三星牌電視機,重寫基類的抽象方法
    /// </summary>
    public class Samsung : TV
    {
        public override void On()
        {
            Console.WriteLine("三星牌電視機已經打開了");
        }

        public override void Off()
        {
            Console.WriteLine("三星牌電視機已經關掉了");
        }

        public override void tuneChannel()
        {
            Console.WriteLine("三星牌電視機換頻道");
        }
    }

采用橋接模式的客戶端調用代碼:

 /// <summary>
    /// 以電視機遙控器的例子來演示橋接模式
    /// </summary>
    class Client
    {
        static void Main(string[] args)
        {
            // 創建一個遙控器
            RemoteControl remoteControl = new ConcreteRemote();
            // 長虹電視機
            remoteControl.Implementor = new ChangHong();
            remoteControl.On();
            remoteControl.SetChannel();
            remoteControl.Off();
            Console.WriteLine();

            // 三星牌電視機
            remoteControl.Implementor = new Samsung();
            remoteControl.On();
            remoteControl.SetChannel();
            remoteControl.Off();
            Console.Read();
        }
    }

使用場景:

三層架構


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()