桥接模式(Bridge Pattern)

      桥接模式是一种结构型模式(structural pattern)用于解决系统设计中两个或多个维度的变化,从而实现各自维度的独立扩展,而不影响到使用客户
下面用一个坦克游戏的示例演示了桥接模式的使用场景(这款游戏前期准备在window、linux上运营,以后可能会在手机、苹果机等等运行)
示例中的类型与结构图中的对应关系
TankGameApp = Client
Tank = Abstraction
Tank70(Tank90) = RefinedAbstraction
Platform = Implementor
NTPlatform = ConcreteImplementorA
LinuxPlatform = ConcreteImplementorB
    public class TankGameApp
    {
        
public static void Main()
        {
            
//如果在NT平台下使用该游戏
            NTPlatform ntPlatform = new NTPlatform();
            Tank nTank 
= new Tank70(ntPlatform);
            nTank.Move();
            nTank.Shot();
            nTank.Stop();

            
//如果在NT平台下使用该游戏
            LinuxPlatform linuxPlatform = new LinuxPlatform();
            Tank lTank 
= new Tank90(linuxPlatform);
            lTank.Move();
            lTank.Shot();
            lTank.Stop();

            Console.ReadLine();
        }
    }

    
public abstract class Tank
    {
        
public abstract void Draw();
        
public abstract void Move();
        
public abstract void Stop();

        
//shot方法不涉及调用系统接口
        public abstract void Shot();
    }

    
public class Tank70 : Tank
    {
        Platform platform;

        
public Tank70(Platform platform)
        {
            
this.platform = platform;
        }

        
public override void Draw()
        {
            platform.Draw();
        }

        
public override void Move()
        {
            platform.Move();
        }

        
public override void Stop()
        {
            platform.Stop();
        }

        
public override void Shot()
        {
            Console.WriteLine(
"Tank70开火!");
        }
    }

    
public class Tank90 : Tank
    {
        Platform platform;

        
public Tank90(Platform platform)
        {
            
this.platform = platform;
        }

        
public override void Draw()
        {
            platform.Draw();
        }

        
public override void Move()
        {
            platform.Move();
        }

        
public override void Stop()
        {
            platform.Stop();
        }

        
public override void Shot()
        {
            Console.WriteLine(
"Tank90开火!");
        }
    }

    
#region 游戏运行平台
    
public abstract class Platform
    {
        
public abstract void Draw();
        
public abstract void Move();        
        
public abstract void Stop();
    }

    
public class NTPlatform : Platform
    {
        
public override void Draw()
        {
            
//调用windows接口绘制坦克外形,等等……
            Console.WriteLine("windows平台下绘制坦克外形。");
        }

        
public override void Move()
        {
            Console.WriteLine(
"windows平台下坦克移动。");
        }

        
public override void Stop()
        {
            Console.WriteLine(
"windows平台下坦克停止。");
        }
    }

    
public class LinuxPlatform : Platform
    {
        
public override void Draw()
        {
            
//调用Linux接口绘制坦克外形,等等……
            Console.WriteLine("Linux平台下绘制坦克外形。");
        }

        
public override void Move()
        {
            Console.WriteLine(
"Linux平台下坦克移动。");
        }

        
public override void Stop()
        {
            Console.WriteLine(
"Linux平台下坦克停止。");
        }
    }
    
#endregion

      这篇文章 中的毛笔+颜料的例子更形象的展现了桥接模式的用法。
posted @ 2009-07-19 18:53  binfen  阅读(305)  评论(0编辑  收藏  举报