码迷,mamicode.com
首页 > 其他好文 > 详细

桥接模式

时间:2017-04-13 08:57:07      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:rri   rgs   images   注意   解决   ons   virt   .com   nbsp   

桥接模式的意图,与适配器很相似

 

适配器,将原有的接口转换成另一种接口,不改变原有接口,达到不同的接口适配

 

桥接模式,在变化的点之间,架起一种桥,使得可以很方便的与不同的点进行统一的通信

 

比如:游戏安装在不同的机器上,游戏的低层接口都是统一的,针对于不同的平台

低层的实现方式不一样,只需要保证游戏在不同的机器上可以实现同样的效果

 

 

继承会带来的麻烦?

 

对象的继承关系是在编译时就定义好了,所以无法在运行时改变从父类继承的实现

 

子类的实现与它的父类有非常紧密的依赖关系,以至于父类实现的任何变化都会导致子类发生变化,当你需要复用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换,这种依懒关系限制了灵活性并最终限制了复用性

 

合成/聚合复用原则

 

尽量使用合成聚合,尽量不要使用类继承

 

聚合表示一种弱的拥有关系

 

合成表示一种强的拥有关系,体现了严格的部分和整体的关系

 

合成/聚合复用原则的好处

 

优先使用对象的合成聚合将有助于保持每个类被封装,并被集中在单个任务上

 

这样类类继承层层次会保持较小的规模,并且不大可能增长为不可控制的庞然大物

 

桥接的结构图

 技术分享

 

桥接模式要注意的点:

技术分享

以下为示例代码

/// <summary>
    /// 通过这个类将refiendabstraction与concreteImplementorB或者C关联起来
    /// </summary>
    class Abstraction
    {
        protected Implementor Implementor;

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

        public virtual void Operation()
        {
            Implementor.Operation();
        }
    }
 class RefiendAbstraction:Abstraction
    {
        public override void Operation()
        {
            Implementor.Operation();
        }
    }
 abstract  class Implementor
  {
      public abstract void Operation();
  }
class ConcreteImplementorA:Implementor
    {
        public override void Operation()
        {
            Console.WriteLine("ConcreteImplementorA的实现方式");
        }
    }
class ConcreteImplementorB:Implementor
    {
        public override void Operation()
        {
            Console.WriteLine("ConcreteImplementorB的实现方式");
        }
    }
static void Main(string[] args)
        {
            Abstraction abstraction=new RefiendAbstraction();
            abstraction.SetImplementor(new ConcreteImplementorA());
            abstraction.Operation();
            abstraction.SetImplementor(new ConcreteImplementorB());
            abstraction.Operation();
            Console.ReadLine();
        }

 

桥接模式

标签:rri   rgs   images   注意   解决   ons   virt   .com   nbsp   

原文地址:http://www.cnblogs.com/gdnyfcuso/p/6702181.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!