桥梁模式和访问者模式
桥梁模式
将抽象部分与实现部分分离,使得他们两部分可以独立的变化。
有这样一个例子:我们希望可以在windows和Linux下都可以查看BMP、JPEG、GIF类型文件。纯粹的继承就需要2*3个子类而桥梁模式只需要2+3个子类。减少了子类的个数
/*** 图像实现类接口*/public interface ImageImp{// TODO}/*** 具体实现类*/public class Winimp implements ImageImp {// TODO}public class Unix implements ImageImp {// TODO}
/*** 抽象image类型,包含ImageImp接口引用* @author jiahua**/public abstract class Image{protected ImageImp imp;public Image(ImageImp image) {imp = image;}public abstract void Method();}
/*** 实现类*/public class BMPImage extends Image{@Overridepublic void Method() {// 通过抽象父类的setImageImp方法获取操作系统ImageImp类,//结合自己BMP图像实现类,完成具体方法}}
public static void main(String[] args) {BMPImage bmp = new BMPImage(); // 具体图像类ImageImp winimp = new Winimp(); //具体系统类bmp.setImageImp(winimp); //注入bmp.Method(); //实现图像和系统功能的方法}
桥梁模式可以从接口中分离实现功能,使设计更具扩展性
访问者模式
访问者模式,是行为型设计模式之一。访问者模式是一种将数据操作与数据结构分离的设计模式。
下面看一个例子,当车出问题,维修工程师要检查车辆的发动机、车身、轮胎之中一个或多个。
每一个稳定组件对象都包含一个可以让访问者(维修工人)访问的入口,当访问者进入后,在访问者众多的方法中选择一个适合该被访问者的方法,达到区别对待的目的。
/*** 访问者* @author jiahua**/public interface Visitor{void visit(Body body); // 检查车身void visit(Wheel wheel); // 检查轮胎void visit(Engine engine); // 发动机}
/*** 接受访问的方法* @author jiahua**/public class Wheel{void accept(Visitor visitor) {visitor.visit(this);}}public class Body{void accept(Visitor visitor) {visitor.visit(this);}}public class Engine{void accept(Visitor visitor) {visitor.visit(this);}}
/*** 具体访问者* @author jiahua**/public class engineer implements Visitor{@Overridepublic void visit(Body body) {// TODO Auto-generated method stub}@Overridepublic void visit(Wheel wheel) {// TODO Auto-generated method stub}@Overridepublic void visit(Engine engine) {// TODO Auto-generated method stub}}
public static void main(String[] args) {Wheel wheel = new Wheel();Visitor visitor = new engineer();wheel.accept(visitor);}
访问者模式使增加新的操作变得容易,他可以收集有关联的方法,而分离没有关联的方法,特别适用于分离因为不同原因而变化的事物。
桥梁模式和访问者模式的区别
不同的是:访问者更多凸显的是将行为抽象出来,实现行为与数据的结合。而桥梁模式并没有凸显这一点。两种设计模式所属的类别无疑是原因之一。
桥梁模式和访问者模式相关推荐
- 图解Java设计模式学习笔记——行为型模式(模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式)
一.模板方法模式(模板模式)--钩子方法 1.需求-豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程选材-->添加配料-->浸泡-->放到豆浆机打碎. 通过添加不同的配料 ...
- 设计模式(行为型模式)——访问者模式(Visitor)
2019独角兽企业重金招聘Python工程师标准>>> 访问者模式把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化.访问者模式适用于数据结构相对稳定算法又易变化的系 ...
- 设计模式之观察者模式、中介者模式、迭代器模式、访问者模式、备忘录模式、解释器模式
前言 这是设计模式的最后一章,包含了剩余的 行为型模式 中的 观察者模式.中介者模式.迭代器模式.访问者模式.备忘录模式.解释器模式 系列文章 第一章:7种设计原则之单一职责原则.接口隔离原则.依赖倒 ...
- 行为型模式:访问者模式
前方高能:<一故事一设计模式>PDF 电子书已经上线,关注公众号即可获取. 文章首发: 行为型模式:访问者模式 十一大行为型模式之十一:访问者模式. 简介 姓名 :访问者模式 英文名 :V ...
- 行为型模式之访问者模式
行为型模式之访问者模式 定义 场景 模式结构和说明 项目介绍 设计 示例代码 模式讲解 1. 模式的功能 2. 调用通路 3. 两次分发技术 定义 表示一个作用于某对象结构中的各元素的操作.它让我们可 ...
- 行为型模式【访问者模式】
行为型模式[访问者模式] 访问者模式是一种将数据结构与数据操作分离的设计模式.是指封装一些作用于某些数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作.属于行为型模式 ...
- 设计模式之适配器模式、委派模式、访问者模式、工厂模式、桥接模式(双维度扩展)
设计模式之适配器模式.委派模式.访问者模式.工厂模式.观察者-发布订阅模式 设计模式分类: 适配器模式(Adapter Pattern) 定义 使用场景 代码实现 写法一:类适配器 写法二:对象适配器 ...
- [导入]C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式.zip(10.41 MB)...
讲座内容: 本培训课程探讨GoF23之 Visitor 访问者模式的意图.动因.原理.应用场景与C#语言实现,以及该模式在.NET框架程序设计中的具体应用. 课程讲师: 李建忠 上海祝成信息科技有限公 ...
- 三、行为型模式【访问者模式、备忘录模式、命令模式、解释器模式、中介模式】
访问者模式 允许一个或者多个操作应用到一组对象上,解耦操作和对象本身,保持类职责单一.满足开闭原则以及应对代码的复杂性. 多态是一种动态绑定,可以在运行时获取对象的实际类型,来运行实际类型对应的方法. ...
最新文章
- “AI明星”地平线B轮融资6亿美元!
- 怎样才有资格被称为开源软件
- 原理图连线有错误提醒_拔罐方法不对=缩短生命,中医提醒,拔火罐警惕三个禁忌...
- C语言重新定位文件,C语言代码重定位 (原创)
- 九章算术卷第五 商功
- [转]VS2010中的单元测试
- azkaban的操作指南
- 人大副教授:本科生一定要做科研吗?九大灵魂拷问
- Oracle 11g for Windows 简体中文版的安装过程
- 内联元素转化为内联块元素的一些小细节
- 一起学爬虫(Python) — 03
- Fast Non-Bayesian Poisson Factorization for Implicit-Feedback Recommendations
- linux下7z压缩包解压
- linux配置防火墙白名单(限制某个IP段)
- my.宝石 --- --- ZC 收集
- Assignment #2 STA355H1S
- 源码解析6-系统封装-QTableView实现
- Android 自定义带Logo的二维码图标
- 2014多益网络笔试题
- PSINS运动轨迹与惯性器件信息生成仿真