桥接模式 桥梁模式 bridge 结构型 设计模式(十二)

意图
意图解析
|
这种采用多层继承结构的形式,类的个数巨大
因为不仅仅有多种类型的Editor,设类型个数为X
又需要在多个操作系统平台上进行实现,设平台个数为Y
实现类的个数为X*Y
|
|
扩展时,如上例,个数又将会爆发式的增长
随之而来的就是维护、使用、运行等成本的增加
|
向分离的演进
|
如果能够分离,也就意味着不会是完全使用继承层次结构
因为继承是强关联,完全继承,就不是分离
那么,就需要考虑类的组合
|
|
如果能够分离,将他们拆分为各自不同的维度,那么就不会出现类的个数爆炸式增长的情况
因为一旦分离,就可以各自独立发展
独立发展,那么增加一个Editor类型就是一个Editor类型
增加一个操作系统平台,就只是增加一个操作系统平台类型
不在爆炸增长
|
| 如果能够进行分离,那么他们各自负责自己不同的维度,职责将会更加单一 |
客户端关注什么?
|
客户端面向Editor进行编程
Editor不关注平台的细节,将与平台相关的实现剥离开来
而平台的实现部分,通过组合的方式,组合到Editor中来
|

代码示例
package bridge;
/**
* 编辑器的抽象类
* 内部包含implementor 对Editor的请求可以借助于Implementor
*/
public abstract class Editor {
protected Implementor implementor;
public void setImplementor(Implementor implementor) {
this.implementor = implementor;
}
void doEdit(){
implementor.systemEditor();
}
}
package bridge;
public class ImgEditor extends Editor {
@Override
void doEdit() {
System.out.println("ImgEditor working");
implementor.systemEditor();
}
}
package bridge;
public class TextEditor extends Editor {
@Override
void doEdit() {
System.out.println("TextEditor working");
implementor.systemEditor();
}
}
package bridge;
public class VideoEditor extends Editor {
@Override
void doEdit() {
System.out.println("VideoEditor working");
implementor.systemEditor();
}
}

package bridge;
public interface Implementor {
void systemEditor();
}
package bridge;
public class WindowsImpl implements Implementor {
@Override
public void systemEditor() {
System.out.println("working on windows platform");
}
}
package bridge;
public class LinuxImpl implements Implementor {
@Override
public void systemEditor() {
System.out.println("working on linux platform");
}
}

package bridge;
public class Test {
public static void main(String[] args) {
Editor editor = new ImgEditor();
editor.setImplementor(new WindowsImpl());
editor.doEdit();
}
}

结构
具体实现化角色ConcreteImplementor
给出实现化角色的具体实现代码
桥梁模式与JDBC
模式对比
与适配器区别
与装饰器区别
总结
场景
优点
注意点
桥接模式 桥梁模式 bridge 结构型 设计模式(十二)的更多相关文章
- 装饰器模式 Decorator 结构型 设计模式 (十)
引子 现实世界的装饰器模式 大家应该都吃过手抓饼,本文装饰器模式以手抓饼为模型展开简介 "老板,来一个手抓饼, 加个培根, 加个鸡蛋,多少钱?" 这句话会不 ...
- OOAD-设计模式(四)结构型模式之适配器、装饰器、代理模式
前言 前面我们学习了创建型设计模式,其中有5中,个人感觉比较重要的是工厂方法模式.单例模式.原型模式.接下来我将分享的是结构型模式! 一.适配器模式 1.1.适配器模式概述 适配器模式(Adapter ...
- 享元模式 FlyWeight 结构型 设计模式(十五)
享元模式(FlyWeight) “享”取“共享”之意,“元”取“单元”之意. 意图 运用共享技术,有效的支持大量细粒度的对象. 意图解析 面向对象的程序设计中,一切皆是对象,这也就意味着系统的运行将 ...
- 代理模式 PROXY Surrogate 结构型 设计模式(十四)
代理模式 PROXY 别名Surrogate 意图 为其他的对象提供一种代理以控制对这个对象的访问. 代理模式含义比较清晰,就是中间人,中介公司,经纪人... 在计算机程序中,代理就表示一个客户端不想 ...
- 组合模式 合成模式 COMPOSITE 结构型 设计模式(十一)
组合模式(合成模式 COMPOSITE) 意图 将对象组合成树形结构以表示“部分-整体”的层次结构. Composite使得用户对单个对象和组合对象的使用具有一致性. 树形结构介绍 为了便于理解, ...
- 设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型)
设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型) 1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决,不能解决就 ...
- 策略模式 Strategy 政策Policy 行为型 设计模式(二十五)
策略模式 Strategy 与策略相关的常见词汇有:营销策略.折扣策略.教学策略.记忆策略.学习策略.... “策略”意味着分情况讨论,而不是一概而论 面对不同年龄段的人,面对不同的商品,必然将会 ...
- 中介者模式 调停者 Mediator 行为型 设计模式(二十一)
中介者模式(Mediator) 调度.调停 意图 用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散 而且可以独立地改变它们之间的交互. ...
- 设计模式 ( 十二 ) 职责链模式(Chain of Responsibility)(对象行为)
设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型) 1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决.不能解决就 ...
随机推荐
- WebP 在减少图片体积和流量上的效果如何?MIP技术实践分享
作者 | Jackson 编辑 | 尾尾 不论是 PC 还是移动端,图片一直占据着页面流量的大头,在图片的大小和质量之间如何权衡,成为了长期困扰开发者们的问题.而 WebP 技术的出现,为解决该问题提 ...
- MIPCache 域名升级
一.MIPCache URL 是什么 举个例子,MIP 官网的 URL 为: https://www.mipengine.org 对应的 MIPCache 的 URL 为: https://mipca ...
- python微信聊天机器人改进版,定时或触发抓取天气预报、励志语录等,向好友推送
最近想着做一个微信机器人,主要想要实现能够每天定时推送天气预报或励志语录,励志语录要每天有自动更新,定时或当有好友回复时,能够随机推送不同的内容.于是开始了分析思路.博主是采用了多线程群发,因为微信对 ...
- SignalR 中丰富多彩的消息推送方式
在上一篇 SignalR 文章中,演示了如何通过 SignalR 实现了简单的聊天室功能:本着简洁就是美的原则,这一篇我们也来聊聊在 SignalR 中的用户和组的概念,理解这些基础知识有助于更好的开 ...
- docker同时删除多个容器
查询所有容器 sudo docker ps -a 同时删除多个符合筛选条件的容器,例如删除状态为“exited”的容器 docker rm $(docker container ls -f " ...
- DSAPI多功能.NET函数库组件
DSAPI.dll不定期更新,增加功能,故无法每次都发到网上,如果需要获得最新版DSAPI.dll的,请到QQ群:419130936群共享里下载. 简介 dsapi.dll是一款基于.net平 ...
- .NET Core:依赖注入
在Startup的ConfigureServices方法中加入需要依赖注入的东西. 每次从容器 中获取的时候都是一个新的实例:services.AddTransient<ITransient ...
- SQL Server的Linked Server支持使用SEQUENCE吗?
SQL Server的Linked Server支持使用SEQUENCE吗? SQL Server 2012开始支持序列(SEQUENCE),今天遇到有个同事咨询,能否在LINKED SERVER ...
- Jvm启动,关闭及对应钩子
很多时候应用服务启动或关闭会做一些预加载(比如缓存,定时任务启动等)或收尾处理工作(比如程序失败记录等) 1. 首先看下Spring框架服务启动加载操作实现,直接上代码 继承实现接口Applicati ...
- volatile关键字的特性及证明
volatile是java虚拟机提供的轻量级的同步机制 JMM(Java内存模型)是围绕着并发编程中原子性.可见性.有序性这三个特征来建立的 原子性:一个操作或多个操作要么全部执行完成且执行过程不被中 ...