设计模式之桥接模式JavaScript实现方式2
来源:互联网 发布:测斜仪数据计算方法 编辑:程序博客网 时间:2024/06/11 07:33
1.意图
将抽象部分和与它的实现部分分离,使它们都可以独立地变化。
2.别名
Handle/Body
3.动机
当一个抽象可能有多个实现的时,通常用继承来协调它们。抽象类定义对该抽象的接口而具体的子类则用不同的方式加以实现。但是此方法有时不够灵活。继承机制将抽象部分与它的实现部分固定在一起,使得难以对抽象部分和实现部分独立地修改,扩充和重用。
简明的说如上图:
1.桥接模式就是要实现A1可以通过桥桥接到B1也可以桥接到B2,形成一个整体供客户端调用,A2可以通过桥桥接到B1也可以桥接到B2,形成一个整体供客户端调用
2.由于有了这座桥,使得桥两边的随着两端不同的维度进行变化,同时两端的事物又通过桥存在着一定的联系。
类图:
示例代码:
/** * Created by yangy on 2017/5/8. */function SamsungPhone(name) { this.name=name;}SamsungPhone.prototype.connectImpl=function () { console.log("连接上了"+this.name);}function SamsungPhone(name) { this.name=name;}function XiaomiPhone(name) { this.name=name;}XiaomiPhone.prototype.connectImpl=function () { console.log("连接上了"+this.name);}function ASUSComputer(phone,computerName) { this.phone=phone; this.computerName=computerName;}ASUSComputer.prototype.connect=function () { console.log(this.computerName); this.phone.connectImpl();}function DellComputer(phone,computerName){ this.phone=phone; this.computerName=computerName;}DellComputer.prototype.connect=function () { console.log(this.computerName); this.phone.connectImpl();}function Student(computer,name) { this.computer=computer; this.name = name;}Student.prototype.useComputer=function () { console.log(this.name); this.computer.connect();}function Teacher(computer,name) { this.computer=computer; this.name = name;}Teacher.prototype.useComputer=function () { console.log(this.name); this.computer.connect();}// # 华硕电脑连接上了三星手机B1var ASUScomputer = new ASUSComputer(new SamsungPhone('三星手机B1'), '华硕电脑A1')ASUScomputer.connect()// # 戴尔电脑连接上了三星手机B1var dellcomputer=new DellComputer(new SamsungPhone('三星手机B1'), '戴尔电脑B1')dellcomputer.connect()// # 戴尔电脑连接上了小米手机A1var dellcomputer = new DellComputer(new XiaomiPhone('小米手机A1'), '戴尔电脑B1')dellcomputer.connect()// # 学生A1使用华硕电脑A1连接上了小米手机A1var student=new Student(new ASUSComputer(new XiaomiPhone('小米手机A1'),'华硕电脑A1'),'学生A1')student.useComputer()// # 老师B1使用戴尔电脑B1连接上了三星手机B1var teacher=new Teacher(new DellComputer(new SamsungPhone('三星手机B1'), '戴尔电脑B1'), '老师B1')teacher.useComputer()
4.适用性
1.不希望在抽象和它的实现部分之间有一个固定的绑定关系。列如在程序运行时刻实现部分应可以被选择或者切换。
2.类的抽象以及它的实现都应该可以通过生成子类方法加以扩充。这时的桥接模式使你可以不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。
3.对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。
4.想对客户完全隐藏抽象的实现部分。
5.有许多类要生成,类的层次结构说明你必须得将一个对象分解成两个部分。
6.你想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。
5.与其他模式的关系
桥接模式和装饰模式:
这两个模式在一定程度上都可减少子类的数目,避免出现复杂的继承关系,但是它们解决的方法却各有不同,装饰模式把子类中比基类多出来的部分放到单独的类里面,以适应新功能的添加,把描述新功能的类封装到基类的对象里面时,就得到了所需要的子类对象,这些描述新功能的类通过聚合以实现很多的功能组合。而桥接模式是把两个以上独立的抽象维度分离,使用聚合的方式使其关联,来达到减少子类的目的,结构上桥接模式比装饰模式要复杂。
装饰模式就像中秋节包装过的月饼一样,可以包多层,每一层可以使用不同的包装纸来包装。
桥接模式和适配器模式
它们的共同点是桥接和适配器都是让两个类配合工作,它们的区别是出发点不同,适配器的出发点是改变已有的两个接口,让它们相容,可以结合那些功能上相似但是接口不同的类,桥接模式的出发点是分离抽象化和实现化,是两者的接口可以不同,目的是分离。
桥接是先有桥,才有两端的东西
适配是先有两边的东西,才有适配器
桥接是在桥好了之后,两边的东西还可以变化。
适配器模式通常在系统设计完成之后才会被使用。桥接模式则是在系统开始时就被使用。
桥接模式与抽象工厂模式
抽象工厂模式可以又来创建和配置一个特定的桥接模式
这两个模式可以组合使用。
桥接模式中,抽象部分需要获取相应的实现部分的接口对象,可以使用抽象工厂模式来创建和配置一个特定的具体实现的对象。
抽象工厂主要是用来创建一系列对象的,如果创建的对象很少,或者是很简单,还可以采用简单工厂,可以达到一样的效果,但是会比抽象工厂来得简单
- 设计模式之桥接模式JavaScript实现方式2
- 设计模式之桥接模式JavaScript实现方式1
- javascript:设计模式之桥接模式
- 设计模式之桥接模式+适配器模式Java实现
- 06.Javascript设计模式之桥接模式----Bridge
- JavaScript-设计模式之接口的实现
- javascript设计模式 桥接模式
- JavaScript设计模式--桥接模式
- 设计模式之桥接模式 及 c++ 实现
- GOF23设计模式之桥接模式的实现
- scala实现设计模式之桥接模式
- 设计模式之桥接模式java实现
- 设计模式之桥接模式Python实现
- 设计模式之桥接模式C++实现
- 设计模式之桥接模式PHP实现
- 《大话设计模式》java实现之桥接模式
- javascript桥接设计模式
- 6. JavaScript 设计模式(策略模式,桥接模式)
- 装好的虚拟机突然不能上网了,报错很诡异,具体报错如下
- 简单明了的C++文件操作之写文件
- vc2015静态编译方法
- [Java面试五]Spring总结以及在面试中的一些问题.
- linux 强大的TOP命令
- 设计模式之桥接模式JavaScript实现方式2
- Tensorflow
- 注册jdbc驱动程序的三种方式
- [Java面试六]SpringMVC总结以及在面试中的一些问题.
- 用Excel获取数据——不仅仅只是打开表格
- C++第五次实验
- 枚举工具类使用方法
- 自定义view之画圆,百分比圆圈
- Python hexstring-list-str之间的转换