ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#设计模式-3结构型模式-3.2桥接模式(Bridge Pattern)

2022-02-19 12:01:49  阅读:173  来源: 互联网

标签:Implementor Console 桥接 void 模式 class WriteLine 设计模式 public


3.2.1 定义

将抽象部分与它的实现部分分离,使它们都可以独立地变化

3.2.2 场景模拟

以电视遥控器的一个例子来引出桥接模式解决的问题,遥控器有开电视,关电视,以及更换节目的功能,电视机有多个品牌

3.2.3 场景代码实现

抽象类TV封装了遥控器功能的变化,具体实现交给具体型号电视机去完成:

  /// <summary>
    /// 电视机,提供抽象方法
    /// </summary>
    public abstract class TV
    {
        public abstract void TurnOn();
        public abstract void TurnOff();

        public abstract void ChangeChannel();
    }

    /// <summary>
    /// 长虹牌电视机,重写基类的抽象方法
    /// 提供具体的实现
    /// </summary>
    public class ChangHongTV : TV
    {
        public override void TurnOn()
        {
            Console.WriteLine("长虹电视打开了");
        }
        public override void TurnOff()
        {
            Console.WriteLine("长虹电视关闭了");
        }
        public override void ChangeChannel()
        {
            Console.WriteLine("长虹电视换节目");
        }
    }

    /// <summary>
    /// 熊猫牌电视机,重写基类的抽象方法
    /// 提供具体的实现
    /// </summary>
    public class PandaTV : TV
    {
        public override void TurnOn()
        {
            Console.WriteLine("熊猫电视打开了");
        }
        public override void TurnOff()
        {
            Console.WriteLine("熊猫电视关闭了");
        }
        public override void ChangeChannel()
        {
            Console.WriteLine("熊猫电视换节目");
        }
    }

抽象化部分的代码:

 /// <summary>
    /// 抽象概念中的遥控器,扮演抽象化角色
    /// </summary>
    public class RemoteControl
    {
        public TV Implementor { get; set; }

       

        public virtual void TurnOn()
        {
            Implementor.TurnOn();
        }

        public virtual void TurnOff()
        {
            Implementor.TurnOff();
        }

        public virtual void ChangeChannel()
        {
            Implementor.ChangeChannel();
        }

    }
    /// <summary>
    /// 具体遥控器
    /// </summary>
    public class ConcreteRemote : RemoteControl
    {
        public override void ChangeChannel()
        {
            Console.WriteLine("-------------------");
            base.ChangeChannel();
            Console.WriteLine("-------------------");
        }
    }

客户端调用:

class Program
    {
        static void Main(string[] args)
        {
            // 创建一个遥控器
            RemoteControl remoteControl = new ConcreteRemote();
            // 长虹电视机
            remoteControl.Implementor = new ChangHongTV();
            remoteControl.TurnOn();
            remoteControl.ChangeChannel();
            remoteControl.TurnOff();
            Console.WriteLine();

            // 熊猫牌电视机
            remoteControl.Implementor = new PandaTV();
            remoteControl.TurnOn();
            remoteControl.ChangeChannel();
            remoteControl.TurnOff();
            Console.Read();
        }
    }

3.2.4 桥接模式的结构图

3.2.5 桥接模式的基本代码

Implementor类:

public abstract class Implementor
    {
        public abstract void Operation();
}

 public class ConcreteImplementorA : Implementor
    {
        public override void Operation()
        {
            Console.WriteLine("具体实现A的方法执行");
        }
    }

    public class ConcreteImplementorB : Implementor
    {
        public override void Operation()
        {
            Console.WriteLine("具体实现B的方法执行");
        }
    }

Abstraction类:

 public class Abstraction
    {
        protected Implementor implementor;

        public void SetImplementor(Implementor implementor)
        {
            this.implementor = implementor;
        }

        public virtual void Operation()
        {
            implementor.Operation();
        }
    }
  public class RefindedAbstraction : Abstraction
    {
        public override void Operation()
        {
            implementor.Operation();
        }
    }

客户端调用:

class Program
    {
        static void Main(string[] args)
        {
            Abstraction ab = new RefindedAbstraction();
            ab.SetImplementor(new ConcreteImplementorA());
            ab.Operation();

            ab.SetImplementor(new ConcreteImplementorB());
            ab.Operation();
            Console.Read();
        }
    }

3.2.6 优缺点

优点:

把抽象接口与其实现解耦。

抽象和实现可以独立扩展,不会影响到对方。

实现细节对客户透明,对用于隐藏了具体实现细节。

缺点: 增加了系统的复杂度

 

3.2.7 使用场景

如果一个系统需要在构件的抽象化角色和具体化角色之间添加更多的灵活性,避免在两个层次之间建立静态的联系。

设计要求实现化角色的任何改变不应当影响客户端,或者实现化角色的改变对客户端是完全透明的。

需要跨越多个平台的图形和窗口系统上。

一个类存在两个独立变化的维度,且两个维度都需要进行扩展。

参考链接:https://www.cnblogs.com/zhaoshujie/p/9743429.html

标签:Implementor,Console,桥接,void,模式,class,WriteLine,设计模式,public
来源: https://www.cnblogs.com/hobelee/p/15912203.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有