扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
本篇内容主要讲解“.NET桥接模式的定义及优缺点”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“.NET桥接模式的定义及优缺点”吧!
成都创新互联公司服务项目包括黄浦网站建设、黄浦网站制作、黄浦网页制作以及黄浦网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,黄浦网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到黄浦省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!桥接模式的定义:
将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化。
桥接模式结构图:
桥接模式中得角色:
抽象化(Abstraction)角色:抽象化给出的定义,并保存一个对实现化对象的引用。
修正抽象化(Refined Abstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。
实现化(Implementor)角色:这个角色给出实现化角色的接口,但不给出具体的实现。必须指出的是,这个接口不一定和抽象化角色的接口定义相同, 实际上,这两个接口可以非常不一样。实现化角色应当只给出底层操作,而抽象化角色应当只给出基于底层操作的更高一层的操作。
结合实例说明:
引用一个电视遥控器的例子,对于每一个牌子的遥控器,都有相呼应的遥控器来控制,这时候我们想到的设可能是:抽象一个遥控器接口,里面有待实现的开机,关机,换频道这样一组功能方法。然后创建具体的遥控器类去继承这个接口,实现里面的方法。这样可以满足每个电视机都实现了自己的遥控器,对于新增了其他类型的 电视机,只需要添加一个派生类就可以满足新的遥控器的派生。但是哪一天,用户要求在遥控中加入一个返回上一个频道的功能时候,就需要改变抽象出来的遥控器 接口,需要向抽象类中添加一个新的方法,这样就改变了抽象类的实现。如果用户要求同时改变电视机的产品行为,和遥控器的行为方法,对于上面的设计会造成很 大的改动。使用桥接模式可以很好的解决这些问题。
使用:
1.首先抽象出电视机,提供遥控器改变的行为方法。
////// 电视机,提供抽象方法 /// public abstract class TV { public abstract void On(); public abstract void Off(); public abstract void tuneChannel(); }
2.创建具体的电视机,继承自抽象电视机类:
////// 三星牌电视机,重写基类的抽象方法 /// public class Samsung:TV { public override void On() { Console.WriteLine("三星牌电视机已经打开了"); } public override void Off() { Console.WriteLine("三星牌电视机已经关掉了"); } public override void tuneChannel() { Console.WriteLine("三星牌电视机换频道"); } } ////// 长虹牌电视机,重写基类的抽象方法 /// 提供具体的实现 /// public class ChangHong : TV { public override void On() { Console.WriteLine("长虹牌电视机已经打开了"); } public override void Off() { Console.WriteLine("长虹牌电视机已经关掉了"); } public override void tuneChannel() { Console.WriteLine("长虹牌电视机换频道"); } }
3.然后抽象出概览中的遥控器,扮演抽象话的角色。
////// 抽象概念中的遥控器,扮演抽象化角色 /// public abstract class RemoteControl { public TV implementor { get; set; } ////// 开电视机 /// 这里抽象类中不再提供实现了,而是调用实现类中的实现 /// public virtual void On() { implementor.On(); } ////// 关电视机 /// public virtual void Off() { implementor.Off(); } ////// 换频道 /// public virtual void SetChannel() { implementor.tuneChannel(); } }
4.创建具体遥控器类:这里面,我重写了更换频道的方法,其实还可以重写其他的方法。
////// 具体遥控器类 /// public class ConcreteRemote:RemoteControl { ////// 重写更换频道方法 /// public override void SetChannel() { Console.WriteLine("重写更换频道方法"); base.SetChannel(); } }
5.调用:
static void Main(string[] args) { // 创建一个遥控器 RemoteControl remoteControl = new ConcreteRemote(); //长虹电视机 remoteControl.implementor = new ChangHong(); remoteControl.On(); remoteControl.SetChannel(); remoteControl.Off(); Console.WriteLine(); // 三星牌电视机 remoteControl.implementor = new Samsung(); remoteControl.On(); remoteControl.SetChannel(); remoteControl.Off(); Console.Read(); }
这样接实现了桥接模式的设计,遥控器的功能实现方法不是在遥控器中去实现了,而是将实现部分用来另一个电视机类去封装它,遥控器中只包含电视机类的一个引用,通过桥接模式,我们把抽象化和实现化部分分离开了,这样可以很好应对这两方面的变化。
优点:
抽象接口与其实现解耦,期中的抽象和实现可以独立的进行扩展,不会影响到对方。
缺点:
增加了系统的复杂度。
使用场景:
1、如果一个系统需要在构件的抽象化角色和具体化角色之间添加更多的灵活性,避免在两个层次之间建立静态的联系
2、设计要求实现化角色的任何改变不应当影响客户端,或者实现化角色的改变对客户端是完全透明的。
3、需要跨越多个平台的图形和窗口系统上
4、一个类存在两个独立变化的维度,且两个维度都需要进行扩展。
到此,相信大家对“.NET桥接模式的定义及优缺点”有了更深的了解,不妨来实际操作一番吧!这里是创新互联建站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流