桥接模式:将抽象部分和它的实现部分分离,使他们可以独立的变化。实现指的是抽象类和它的派生类用来实现自己的对象。如手机软件和品牌分开实现。已达到松耦合的目地。

合成聚合复用原则:聚合是弱的“拥有关系”,体现A对象可以包含B对象,但B对象不是A对象的一部分 如:大雁和雁群

                        合成是强的“拥有关系”,体现了严格的整体和部分的关系部分和整体的生命周期一致,如:大雁和燕翅

桥接模式采用的是聚合原则,将手机品牌和手机软件分开设计

本实例以手机品牌和手机软件为例:

手机软件抽象类(PhoneSoft)

namespace BridgePattern.CLASS
{
    abstract class PhoneSoft
    {
        public abstract void Run();
    }
}
View Code

通讯录(PhoneAddressList)继承于手机软件抽象类

namespace BridgePattern.CLASS
{
    class PhoneAddressList:PhoneSoft
    {
        public override void Run()
        {
            Console.WriteLine("打开手机通讯录");
        }
    }
}
View Code

游戏类(PhoneGame)继承于手机软件抽象类

namespace BridgePattern.CLASS
{
    class PhoneGame:PhoneSoft
    {
        public override void Run()
        {
            Console.WriteLine("运行手机游戏!");
        }
    }
}
View Code

手机品牌抽象类(PhoneBrands)

namespace BridgePattern.CLASS
{
    abstract class PhoneBrands
    {
        //关键代码
       protected PhoneSoft soft;
        public void SetPhoneSoft(PhoneSoft soft)
        {
            this.soft = soft;
        }
        public abstract void Run();
    }
}
View Code

手机品牌N(PhoneBrandN)继承于手机品牌抽象类

namespace BridgePattern.CLASS
{
    class PhoneBrandN:PhoneBrands
    {
        public override void Run()
        {
            soft.Run();
        }
    }
}
View Code

手机品牌M(PhoneBrandM)继承于手机品牌抽象类

namespace BridgePattern.CLASS
{
    class PhoneBrandM:PhoneBrands
    {
        public override void Run()
        {
            soft.Run();
        }
    }
}
View Code

测试类(TestMain)

namespace BridgePattern
{
    class TestMain
    {
        static void Main(string[] args)
        {
            Console.WriteLine("------N牌手机功能------");
            PhoneBrands pbN = new PhoneBrandN();
            pbN.SetPhoneSoft(new PhoneGame());
            pbN.Run();
            pbN.SetPhoneSoft(new PhoneAddressList());
            pbN.Run();

            Console.WriteLine("------M牌手机功能------");
            PhoneBrands pbM = new PhoneBrandM();
            pbM.SetPhoneSoft(new PhoneGame());
            pbM.Run();
            pbM.SetPhoneSoft(new PhoneAddressList());
            pbM.Run();
        }
    }
}
View Code

此方式无论增加品牌还是增加软件互相不会受影响,降低了代码的耦合度

posted on 2013-08-16 19:06  zxd543  阅读(104)  评论(0编辑  收藏  举报