码迷,mamicode.com
首页 > Windows程序 > 详细

C#面向对象设计之——桥接模式(八)

时间:2015-09-24 20:54:26      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:

一、前言

桥接模式就是将抽象部分和它的实现部分分离,使它们都可以独立地变化。抽象与它的实现分离,实现是指抽象类和它的派生类用来实现自己的对象。就手机而言,手机既可以用品牌来分类,也可以以功能来分类。

 

在面向对象设计中,我们有一个很重要的原则:合成/聚合复用原则,即优先使用对象合成/聚合,而不是类继承。

对象的继承关系是在编译时就已经定好了,所以无法再运行时改变从父类继承发生的变化。当你需要复用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写或者被其他更适合的类替换,这种依赖关系限制了灵活性并最终限制了复用性。

例如做一部能够使用的手机,分为硬件部分和软件部分,它们组合起来才能够成为一部手机,如果我们可以让软件和硬件(或者说不通型号的手机)的耦合度分离,那么久可以大大减少面对新需求时改动过大的不合理情况,现在可以把“手机品牌”和“手机软件”抽象出来,让不同的品牌和功能分别继承它们,这样增加新的品牌或新的功能都不会影响到其他类了。

技术分享

技术分享

二、实例代码

namespace 桥接模式
{
    class Program
    {
        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 HandsetBrand
    {
        protected HandsetSoft soft;

        //设置手机软件
        public void SetHandsetSoft(HandsetSoft soft)
        {
            this.soft = soft;
        }
        //运行
        public abstract void Run();
        

    }

    //手机品牌N
    class HandsetBrandN : HandsetBrand
    {
        public override void Run()
        {
            soft.Run();
        }
    }

    //手机品牌M
    class HandsetBrandM : HandsetBrand
    {
        public override void Run()
        {
            soft.Run();
        }
    }

    //手机品牌S
    class HandsetBrandS : HandsetBrand
    {
        public override void Run()
        {
            soft.Run();
        }
    }


    //手机软件
    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("运行手机通讯录");
        }
    }

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

}

三、总结

实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合度。

C#面向对象设计之——桥接模式(八)

标签:

原文地址:http://www.cnblogs.com/kesimin/p/4836307.html

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