桥接模式

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

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

 

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

posted @ 2020-01-20 04:29  程序杰杰  阅读(252)  评论(0编辑  收藏  举报