设计模式之------桥接模式(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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elsa~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值