桥接模式

白昼怎懂夜的黑 提交于 2020-01-20 04:51:16

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

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

 

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!