您的位置:首页 > 其它

大话设计之桥接模式

2014-05-23 10:02 197 查看
桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。

首先什么叫抽象与它的实现分离,不是说,让抽象类与其派生类分离,因为没有意义,实现指的是抽象类和它的派生类用来实现自己的对象。

下面来看一段代码:

class 桥接模式
    {
        static void Main(string[] args)
        {
            HandsetBrand ab;
            ab = new HandsetBrandN();
            
            ab.SetHandsetSoft (new HandsetGame() );
            ab.Run ();

            ab.SetHandsetSoft (new HandsetAddressList() );
            ab.Run ();

            ab=new HandsetBrandM ();

            ab.SetHandsetSoft (new HandsetGame() );
            ab.Run();

            ab.SetHandsetSoft (new HandsetAddressList() );
            ab.Run ();

            Console .Read ();
        }
    }
    abstract class HandsetSoft        //手机软件类
    {
        public abstract void Run();
    }
    class HandsetGame : HandsetSoft     //手机游戏类
    {
        public override void Run()
        {
            Console.WriteLine("运行手机游戏");
        }
    }
    class HandsetAddressList : HandsetSoft   //手机通讯录类
    {
        public override void Run()
        {
            Console .WriteLine ("运行手机通讯录");
        }
    }
    abstract class HandsetBrand    //手机品牌
    {
        protected HandsetSoft soft;

        //设置手机软件
        public void SetHandsetSoft(HandsetSoft soft)
        {
            this.soft = soft;
        }
        //运行
        public abstract void Run();
    }
    class HandsetBrandN : HandsetBrand
    {
        public override void Run()
        {
            soft.Run ();
        }
    }
    class HandsetBrandM : HandsetBrand
    {
        public override void Run()
        {
            soft.Run ();
        }
    }
如果增加MP3功能,只需要增加这个类就可以了:

如下面代码:
//手机MP3播放
    class HandsetMP3 : HandsetSoft
    {
        public override void Run()
        {
            Console.WriteLine("运行手机MP3播放");
        }
    }


如果增加品牌只需要增加一个子类:S品牌。

//手机品牌S
    class HandsetBrandS : HandsetBrand
    {
        public override void Run()
        {
            soft.Run();
        }
    }
看上面的代码,想到了开放-封闭原则,这样不用修改原来的代码,只需要拓展类就可以了。

继承是一种强耦合的结构,父类变,子类就会改变。对于桥接模式,理解为实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: