设计模式之Bridge学习笔记

本文探讨了桥接设计模式的应用,通过实例分析展示了如何将抽象与实现分离,以便各自独立变化。特别关注解决跨平台游戏开发中坦克类型的复用问题。
设计模式之Bridge学习笔记
Bridge 桥接(结构型模式)
 
  抽象不应该依赖于实现细节,实现细节应该依赖于抽象。
 
  先看一个例子:
      加入我们要开发一个同时支持PC和手机的坦克游戏,游戏在PC和手机上功能一样,
都有同样的类型,面临同样的功能需求变化,比如坦克可能有多种不同型号;T50,T75....
 对于其中坦克的设计,我们可能很容易设计出来一个Tank的抽象基类,然后各种不同的型号Tank继承自该类;
 //public abstract class Tank
     {
        public abstract void  Shot();
        public abstract void Run();
        public abstract void Trun();
       }
  //各种实现
  public class T50:Tank{...........}
  public class T75:Tank{...........}
  public class T90:Tank{...........}
 如果在PC上运行,上面的实现是可以的,但是PC机和手机上的图形绘制,声效,操作等实现
 完全不同。。。。。。。。。因此对于各种型号的坦克,都要提供提供各种不同平台上的坦克
实现:
 //PC 平台实现
     public class PCT50:T50{''''''''''''}
     public class PCT75:T75{''''''''''''}
     public class PC90:T90{''''''''''''}
//手机平台实现
     public class MobileT50:T50{''''''''''''}
     public class MobileT75:T75{''''''''''''}
     public class MobileT90:T90{''''''''''''}
这样设计会带来很多问题:有很多重复代码,类的结构过于复杂,难以维护,最致命
是引入人核心平台,比如在TV上的Tank游戏,都会让整个类层级结构复杂化。
 动机(Motivation)
 思考上述问题的症结:事实上由于Tank类型的固有逻辑,使得Tank类型具有了两个变化的维度
————一个变化的维度为“平台的变化” ,一个变化维度为“型号的变化”
 如何应对这种对维度的变化???如何利用面向对象技术来使得Tank类型可以轻松地沿着
平台和型号两个方向变化,而引入额为的复杂度?
 意图(Intent)
 将抽象部分与实现部分分离,使他们都可以独立地变化。
 public abstract class TankPlatformImpolementation
 {
      public abstract void MoveTankTo(Point to);
      public abstract void DrawTank();
      public abstract DoShot();
 }
//
public abstract class Tank
     {
        protected TankPlatformImpolementation tankImpl;
       
       public Tank(TankPlatformImpolementation tankImpl)
       {
          this.tankImpl=tankImpl;
       }
       public TankPlatformImpolementation  TankImp1
       {
         get{return tankImpl;}
         set{tankImpl=value;}
      }
        public abstract void  Shot();
        public abstract void Run();
        public abstract void Trun();
       }

 public class T50:Tank
 
  {
    public T50(ankPlatformImpolementation tankImpl):base( tankImpl)
     public override void Shot()
      {
        tankTmp1.DoShot();
     }
  }
 public class T90:Tank
 
  {
     public T90(ankPlatformImpolementation tankImpl):base( tankImpl)
     public override void Shot()
      {
        tankTmp1.DoShot();
     }
  }

  //pc
  public class PCTankPlatformImpolementation:TankPlatformImpolementation
 {
      public override void MoveTankTo(Point to){........}
      public override ract void DrawTank(){........}
      public override DoShot(){........}
 }
 //Mobile
  public class MobileTankPlatformImpolementation:TankPlatformImpolementation
 {
      public override void MoveTankTo(Point to){........}
      public override ract void DrawTank(){........}
      public override DoShot(){........}
 }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值