设计模式(8)---桥接模式
2018-06-17 20:07:24来源:未知 阅读 ()
定义:
桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
解释:抽象与它的实现分离并不是说让抽象类与其派生类分离,而是抽象类和它的派生类用来实现自己的对象。
UML类图和基本代码:
class Program { static void Main(string[] args) { Abstration ab = new RefinedAbstration(); ab.SetImplementor (new ConcreteImplementorA ()); ab.Operation(); ab.SetImplementor(new ConcreteImplementorB()); ab.Operation(); Console.Read(); } } abstract class Implementor { public abstract void Operation(); } class ConcreteImplementorA : Implementor { public override void Operation() { Console.WriteLine("implement A action"); } } class ConcreteImplementorB : Implementor { public override void Operation() { Console.WriteLine("implement B action"); } } class Abstration { protected Implementor implementor; public void SetImplementor(Implementor implementor) { this.implementor = implementor; } public virtual void Operation() { implementor.Operation(); } } class RefinedAbstration : Abstration { public override void Operation() { implementor.Operation(); } }
在网上看到一个实例,感觉非常贴切,”拿来主义“参考学习。
具体是:现实生活中实现遥控器,遥控器中并不包含开机、关机、换台等功能的实现,遥控器只是包含了电视机上的这些功能的引用,然后红外线去找到电视机上对应功能的实现。
抽象类电视机及生成长虹、三星电视机:
public abstract class TV { public abstract void On(); public abstract void Off(); public abstract void TurnChannel(); } public class ChangHong : TV { public override void On() { Console.WriteLine("长虹牌电视机已经打开了"); } public override void Off() { Console.WriteLine("长虹牌电视机已经关掉了"); } public override void TurnChannel() { Console.WriteLine("长虹牌电视机换频道"); } } public class Samsung : TV { public override void On() { Console.WriteLine("三星牌电视机已经打开了"); } public override void Off() { Console.WriteLine("三星牌电视机已经关掉了"); } public override void TurnChannel() { Console.WriteLine("三星牌电视机换频道"); } }
抽象类遥控器及实现:
public class RemoteControl { private TV implementor; public TV Implementor { get { return implementor; } set { implementor = value; } } public virtual void On() { implementor.On(); } public virtual void Off() { implementor.Off(); } public virtual void TurnChannel() { implementor.TurnChannel(); } } public class ConcreteRemote : RemoteControl { }
客户端调用:
RemoteControl remoteControl = new ConcreteRemote(); remoteControl.Implementor = new ChangHong(); remoteControl.On(); remoteControl.Off(); remoteControl.TurnChannel();
优点:
抽象接口与实现解耦。
抽象和实现都可以独立扩展,不会影响到对方。
缺点:
增加了系统的复杂度。
适用场景:
一个类存在两个独立变化的维度,且两个维度都需要进行扩展。
需要跨越多个平台的图形和窗口系统。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:如何安全实现“记住我”的功能
- PHP常用的五种设计模式及应用场景,来了解下 2019-08-23
- PHP设计模式学习下 2019-08-09
- MySQL优化(1)--------常用的优化步骤 2018-07-24
- MySQL操作中的一些细节及良好习惯--------持续更新中... 2018-06-23
- MariaDB体验1----数据库安装 2018-06-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash