设计模式之------桥接模式(Bridge Pattern)

一、概念

①、什么是桥接模式?

将抽象部分与它的实现部分分离,是它们都可以独立地变化。它是一种对象结构型模式,又称为柄体模式或接口模式。

用于把抽象化与实现化解耦,使得二者可以独立变化。它通过提供抽象化和实现化之间的桥接结构来实现二者的解耦。

②、主要解决什么问题?

解决在多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。

③、什么时候使用?

实现系统可能有多个角度分类,每一种角度都可能变化。一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。

④、如何解决?

把这种多角度分类分离出来,让它们独立变化,减少它们之间的耦合。抽象类依赖实现类。

二、图

①、结构图

②、拓展图(http://www.cnblogs.com/jobbible/p/9931198.html

 

三、代码

①、案例类图

②、代码

1、聚合的代码体现

       static void Main(string[] args)
        {
            //聚合的代码体现
            HandsetBrand ab;                                   //创建一个手机品牌类的变量ab
            ab = new HandsetBrandM();                          //给手机品牌变量ab赋值,赋值为手机品牌N,此段代码确定了手机品牌
            ab.SetHandsetSoft(new HandsetGame());              //调取手机品牌中的获取手机软件的方法
            ab.Run();                                          //运行手机品牌N的Run方法,运行获得的手机软件的Run方法
            ab.SetHandsetSoft(new HandsetAdressList());        //获取手机软件 
            ab.Run();                                          //运行手机品牌N的获得软件的方法
        }
    }
    public abstract class HandsetBrand
    {
        protected HandsetSoft soft;                            //手机品牌要有手机软件建立聚合联系,在手机品牌里声明一个手机软件变量,以备运行。
        public void SetHandsetSoft(HandsetSoft soft)           //创建一个获取软件的方法,参数(依赖)手机软件
        {
            this.soft = soft;                                  //将获取的收集软件赋予给手机品牌中的手机软件变量
        }
        public abstract void Run();                            //手机品牌抽象方法运行。
    }
    public abstract class HandsetSoft                          //创建一个抽象的手机软件类
    {
        public abstract void Run();                            //建立一个抽象的收集软件运行方法
    }

2、通过实现来拓展(实现)

   class HandsetGame:HandsetSoft                               //具体的收集软件游戏继承了抽象的手机软件
    {
        public override void Run()                             //重写了父类的Run()方法
        {
            Console.WriteLine("运行手机游戏");                  //在控制台上写入内容
        }
    }

    class HandsetAdressList:HandsetSoft
    {
        public override void Run()
        {
            Console.WriteLine("运行手机通讯录");
        }
    }
    class HandsetMp3:HandsetSoft
    {
        public override void Run()
        {
            Console.WriteLine("运行手机MP3");
        }
    } 

3、通过继承来拓展(抽象)

 class HandsetBrandM:HandsetBrand                            //建立一个具体的手机品牌M类继承抽象的收集品牌类
    {
        public override void Run()                             //重写父类的Run()方法
        {
            soft.Run();                                        //手机品牌M的run()方法是运行软件的Run()方法
        }
    }
    class HandsetBrandN : HandsetBrand
    {
        public override void Run()                             //重写手机品牌的Run方法
        {
            soft.Run();                                        //运行获得的软件的Run方法
        }
    }
    class HandsetBrandS:HandsetBrand
    {
        public override void Run()
        {
            soft.Run();
        }
    }
}

四、拓展(很棒的文章)

https://blog.csdn.net/qq_31156277/article/details/80659537

https://www.cnblogs.com/V1haoge/p/6497919.html

https://www.cnblogs.com/libingql/p/3496075.html(讲解了抽象化与实现化)

http://www.cnblogs.com/jobbible/p/9931198.html

以上便是桥接模式的初步梳理,继续前行^_^

猜你喜欢

转载自blog.csdn.net/Elsa15/article/details/87889996