桥接模式(Bridge)

简介

桥接模式,将抽象部分与它的实现部分分离,使他们都可以独立地变化。桥接模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。


书中实例

时间过的可真快,想想几年前手机游戏还不是Android和Ios两种下载方式呢,只有同一厂家的手机才能玩同一款游戏,小菜和大鸟就赶在了这个时候。小菜想玩大鸟手机里的游戏,结果小菜就又学新模式了——桥接模式。


桥接模式实现程序

    //手机品牌类
    abstract class HandsetBrand
    {
        protected HandsetSoft soft;

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

        //运行
        public abstract void Run();
    }
    //手机游戏类
    class HandsetGame : HandsetSoft
    {
        public override void Run()
        {
            Console.WriteLine("运行手机游戏");
        }
    }
    //手机品牌N的游戏
    class HandsetBrandNGame : HandsetBrandN
    {
        public override void Run()
        {
            Console.WriteLine("运行M品牌手机游戏");
        }
    }
    //手机品牌M的游戏
    class HandsetBrandMGame : HandsetBrandM
    {
        public override void Run()
        {
            Console.WriteLine("运行M品牌手机游戏");
        }
    }
    //手机品牌N
    class HandsetBrandN : HandsetBrand
    {
        public override void Run()
        {
            soft.Run();
        }
    }
    //手机品牌M
    class HandsetBrandM : HandsetBrand
    {
        public override void Run()
        {
            soft.Run();
        }
    }
    //手机软件
    abstract class HandsetSoft
    {
        public abstract void Run();
    }
    //手机通讯录类
    class HandsetAddressList : HandsetSoft
    {
        public override void Run()
        {
            Console.WriteLine("运行手机通讯录");
        }
    }
    //手机品牌M的通讯录
    class HandsetBrandMAddressList : HandsetBrandM
    {
        public override void Run()
        {
            Console.WriteLine("运行M品牌手机通讯录");
        }
    }
    //手机品牌N的通讯录
    class HandsetBrandNAddressList : HandsetBrandN
    {
        public override void Run()
        {
            Console.WriteLine("运行N品牌手机通讯录");
        }
    }
    //客户端
    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();
        }
    }


组成类图



关系介绍

实现者类(Implementor)下属有N个具体实现者子类(ConcreteImplementor),它们负责实现实现者类。抽象类(Abstraction)是被提炼抽象类(RefinedAbstraction)的父类。抽象类和实现者类之间为聚合关系,实现者类拥有抽象类。


桥接模式的构成

Implementor(实现者类):这个角色给出实现化角色的接口,但不给出具体的实现。必须指出的是,这个接口不一定和抽象化角色的接口定义相同,实际上,这两个接口可以非常不一样。实现化角色应当只给出底层操作,而抽象化角色应当只给出基于底层操作的更高一层的操作。

ConcreteImplementor(具体实现者类):具体实现者子类。

Abstraction(抽象类):抽象化给出的定义,并保存一个对实现化对象的引用。

RefinedAbstraction(提炼抽象类):扩展抽象化角色,改变和修正父类对抽象化的定义。


桥接模式的优点

1、分离抽象接口及其实现部分。提高了比继承更好的解决方案。
2、桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。

3、实现细节对客户透明,可以对用户隐藏实现细节。


使用场景

1.在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化。桥接模式可以应对这种多维度变化。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值