• 桥接模式


    ,抽象类与具体的实现类在结构上是相互独立的,两者的相互变化并不会影响到彼此,只要“桥梁”没变,两者的变化并不会影响到彼此。桥接模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。

    桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

    参照菜鸟教程的桥接模式,具体实现如下图所示

      #region 圆设置类
        class CircleSet
        {
            public CircleSet(int _radius)
            {
                radius = _radius;
            }
            public int radius { get; set; }
        }
        #endregion
     #region 绘制接口
        interface DrawAPI
        {
            void DrawCircle(CircleSet circleset);
        }
        #endregion
     #region 具体绘制类
        class RedCircle : DrawAPI
        {
            public void DrawCircle(CircleSet circleset)
            {
                Console.WriteLine("draw circle radius:{0} ; color:red", circleset.radius);
            }
        }
        class GreenCircle : DrawAPI
        {
            public void DrawCircle(CircleSet circleset)
            {
                Console.WriteLine("draw circle radius:{0} ; color:green", circleset.radius);
            }
        }
        #endregion
      #region 抽象形状类(桥接)
        abstract class Shape
        {
            protected DrawAPI _drawapi;
            public Shape(DrawAPI drawapi)
            {
                _drawapi = drawapi;
            }
            public abstract void Draw();
        }
        #endregion
        #region 具体实现类
        class Circle : Shape
        {
            private CircleSet _circleset;
            public Circle(DrawAPI drawapi, CircleSet circleset) : base(drawapi)
            {
                _circleset = circleset;
            }
            public override void Draw()
            {
                _drawapi.DrawCircle(_circleset);
            }
        }
        #endregion
     static void Main(string[] args)
            {
                DrawAPI da_red = new RedCircle();
                Shape shape = new Circle(da_red,new CircleSet(10));
                shape.Draw();
                Console.ReadKey();
            }

    桥接模式实现是:具体实现类继承自桥接而不直接继承实现类的抽象类,抽象类与具体的实现类在结构上是相互独立的,两者的相互变化并不会影响到彼此,只要“桥梁”没变,两者的变化并不会影响到彼此。

    就以上教程的实例程序来说,具体的实现是RedCircle、GreenCircle,它们的抽象类为Shape,按一般逻辑来说,我们是直接继承Shape来创建不同的具体对象,但桥接模式中是通过“桥梁”DrawAPI建立抽象与具体实现之间的联系,调用DrawAPI中的方法来具体实现。

    巧妙的点就在于实现类通过桥接调用具体,那些继承接口的实现类的调用借助桥接来实现,从而解除耦合

  • 相关阅读:
    BZOJ_2802_[Poi2012]Warehouse Store_堆+贪心
    BZOJ_1025_[SCOI2009]游戏_DP+置换+数学
    BZOJ_3672_ [Noi2014]购票_CDQ分治+斜率优化
    BZOJ_3671_[Noi2014]随机数生成器_set+贪心
    BZOJ_1998_[Hnoi2010]Fsk物品调度_并查集+置换
    BZOJ_1119_[POI2009]SLO_置换+贪心
    「JOI Open 2016」摩天大楼(笛卡尔树dp+优化)
    【GDOI2020模拟01.16】树上的鼠 (博弈+长链剖分优化dp)
    【GDOI2020模拟01.16】划愤(nim积+行列式)
    Codeforces [Hello 2020] 1284F New Year and Social Network(图论匹配推理+lct)
  • 原文地址:https://www.cnblogs.com/ningxinjie/p/12216451.html
Copyright © 2020-2023  润新知