桥接模式

Posted ningxinjie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了桥接模式相关的知识,希望对你有一定的参考价值。

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

桥接(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 具体实现类
    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中的方法来具体实现。

 

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

以上是关于桥接模式的主要内容,如果未能解决你的问题,请参考以下文章

桥接模式 C++ 代码编译错误

案例分析:设计模式与代码的结构特性

桥接模式-代码实现

23种设计模式之桥接模式代码实例

设计模式之桥接模式

桥接模式