`

设计模式学习笔记——桥梁模式

阅读更多

 

Bridge Mode

又称为柄体模式或接口模式

 

桥梁模式含有2个等级结构

1 由抽象化角色和修正抽象化角色组成的抽象化等级结构

2 由实现化角色和两个具体实现化角色所组成的实现化等级结构

 

桥梁模式设计的角色:

●抽象化角色:抽象化给出的定义,并保存一个对实现化对象的引用

●修正抽象化角色:扩展抽象化角色,改变和修正父类对抽象化的实现

●实现化角色:给出实现化角色的接口

●具体实现化角色:给出实现化角色对象接口的具体实现

依旧懒人盗图:


 

书上草草扫了一遍概念,完全没有弄明白他在讲的是什么东西,于是上网找相关的资料,这才有点眉目。

同样参照网上,采用画图的例子来说明桥梁模式是如何作用的

对照着上面的类图

 

Shape为抽象化角色,其中只有一个待实现的draw方法

 

public interface Shape {
	void draw();
}
 

 

Circle和Square为Shape的实现,其中接收一个Drawing对象,决定采用何种绘图方式

 

public class Circle implements Shape{
	private Drawing drawing;
	public Circle(Drawing drawing){
		this.drawing=drawing;
	}
	public void draw() {
		System.out.println("Draw Circle");
		drawing.drawCircle();
	}
}
 

 

 

public class Square implements Shape{
	private Drawing drawing;
	public Square(Drawing drawing){
		this.drawing=drawing;
	}
	public void draw() {
		System.out.println("Draw Square");
		drawing.drawSquare();
	}
}
 

Drawing为实现化角色,提供了不同画法的接口

 

public interface Drawing {
	void drawCircle();
	void drawSquare();
}
 

Drawing1和Drawing2就是两种具体画法的实现

 

public class Drawing1 implements Drawing{
	public void drawCircle() {
		System.out.println("Drawing1_circle");
	}
	public void drawSquare() {
		System.out.println("Drawing1_square");
	}
}
 

 

public class Drawing2 implements Drawing{
	public void drawCircle() {
		System.out.println("Drawing2_circle");
	}
	public void drawSquare() {
		System.out.println("Drawing2_square");
	}
}
 

最终可以灵活的构建不同的绘图组合

 

public class BridgePattern {
	public static void main(String[] args) {
		Shape circle=new Circle(new Drawing1());
		Shape circle2=new Circle(new Drawing2());
		Shape square=new Square(new Drawing1());
		Shape square2=new Square(new Drawing2());
		circle.draw();
		square.draw();
		circle2.draw();
		square2.draw();
	}
}

 最终可以得到输出结果

Draw Circle

Drawing1_circle

Draw Square

Drawing1_square

Draw Circle

Drawing2_circle

Draw Square

Drawing2_square

 

使用桥梁模式的时机

●一个系统需要在构件的抽象化角色和具体化角色之间增加灵活性,避免2个层次之间建立的静态联系

●设计要求实现化角色的任何改变不影响客户端

●一个构件有多于一个的抽象化角色和实现化角色,需要动态耦合

●抽象化角色和具体化角色需要独立变化

 

当只有一个具体实现化角色的情况下,抽象的实现化角色可以被取消,也就是退化的桥梁模式

 

参考资料链接:

http://www.iteye.com/topic/57178 其中还有对于JDBC,Hibernate的Dao的类比,非常生动

http://www.iteye.com/topic/137469 另外一篇桥梁模式的文章

  • 大小: 5.5 KB
分享到:
评论

相关推荐

    AVR 学习笔记(LT M16)1

    AVR学习笔记是针对初学者的一系列教程,特别适合那些使用力天电子LT_mini_M16学习版的人。这个压缩包包含了一系列PDF文档,涵盖了从基础到进阶的多个实验,帮助用户逐步掌握AVR单片机的使用。 首先,我们来看"1.AVR...

    小学数学教师业务学习笔记(注释)资料全.doc

    在课堂教学过程中,教师要能针对学习内容,学生的经历、兴趣、知识水平、理解力等,设计出富有弹性的灵活多样的教学活动,营造宽松的课堂学习环境,创设自主学习、积极互动参与、探究的课堂教学模式,激发学生的学习...

    [摘]Struts 学习笔记之ActionForm

    Struts是Java Web开发中的一个经典框架,它在MVC(Model-View-Controller)设计模式的基础上提供了一种实现方式,极大地简化了Web应用的构建。ActionForm是Struts框架中一个关键组件,用于处理用户从视图层提交的...

    golang学习笔记资源

    本资源中的“csdn”可能指的是中国最大的开发者社区——CSDN上关于Golang的学习笔记。在这里,你可以找到详细的教程、实例代码、常见问题解答以及社区成员的经验分享,进一步提升你的Golang技能。 总的来说,Golang...

    Eclipse插件开发学习笔记(ch11-12)

    本篇将基于"《Eclipse插件开发学习笔记》(ch11-12)"的内容,深入讲解Eclipse插件开发中的两个关键概念——视图(Views)和操作(Actions)。 **第11章 操作(Actions)** 在Eclipse插件开发中,操作(Actions)是...

    mvc 学习笔记,重点难点记录

    MVC(Model-View-Controller)是一种广泛应用于软件工程中的设计模式,尤其在Web应用开发中非常常见。它将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的...

    java web项目——BBS论坛(程序源论坛)

    4. **MVC (Model-View-Controller)**:设计模式,将业务逻辑、数据和界面显示分离,提高代码可维护性。 5. **MySQL**:关系型数据库管理系统,用于存储用户信息、帖子内容、评论等数据。 二、系统功能模块 1. **...

    记事本界面.zipIOS应用例子源码下载

    3. MVC设计模式:Model-View-Controller是iOS应用开发中的常见设计模式,源码中的每个部分都应能对应到MVC的某一层。 4. 视图构建:通过Interface Builder或代码动态创建UI,理解Auto Layout和Size Classes的概念,...

    RibbonOneNoteTagReader

    此外,WPF的MVVM(Model-View-ViewModel)设计模式也可能被应用于该项目。在MVVM模式下,视图(View)负责呈现用户界面,模型(Model)封装业务逻辑和数据,而视图模型(ViewModel)作为两者之间的桥梁,处理数据...

    NDIS.rar_doc_ndis_ndis 过滤端口

    描述中提到的"NDIS过滤驱动 小端口驱动 参考文章,DOC类型",暗示了我们有两个文档资料,分别是"NDISWDM驱动学习笔记.doc"和"NDIS驱动框架探究.doc",这两份文档可能是深入解析NDIS驱动技术,特别是小端口驱动和过滤...

    科帮网javaWeb计算机配件报价系统项目源码.zip

    下面,我们将深入探讨这个项目的知识点,包括其核心技术、设计模式以及实现原理。 首先,JavaWeb项目的核心技术主要包括Servlet、JSP和JavaBean。Servlet是JavaWeb应用中的服务器端组件,负责处理客户端请求和返回...

    Code-notebook

    5. **笔记与心得(Notes & Insights)**:记录在编程过程中的一些思考和领悟,比如设计模式的理解、性能优化的经验等。这些笔记能帮助我们形成自己的编程哲学。 6. **版本控制(Version Control)**:为了确保代码...

    Linux_driver_develop-ARM9-note.rar_arm_arm9_linux arm_linux arm9

    《Linux驱动开发——基于ARM9的笔记》 在IT领域,Linux驱动开发是核心系统级编程的一部分,尤其在嵌入式系统中,如基于ARM9的硬件平台,它显得尤为重要。ARM9是一款广泛应用的微处理器架构,常用于嵌入式设备,如...

    Machine-Learning

    标题:“机器学习”——通往智能化世界的桥梁 在当今数字化时代,机器学习已经成为信息技术领域中最炙手可热的话题之一。它是一种人工智能的分支,其核心目标是让计算机系统能够从数据中自动学习,无需明确编程,...

    Handwriting recognition research-- Twenty years of achievement

    然而,近20年来,这一领域得到了显著的扩展,不仅局限于单一字符的识别,而是转向了更广泛的书写模式识别,包括连续的手写文本、笔记、草图等。这种转变标志着手写识别技术进入了更加成熟和实用的阶段。 ### 工业界...

    Android代码-使用Kotlin实现的一个简单的记事本App

    在这个特定的案例中,我们关注的是一个使用Kotlin编程语言实现的简单记事本应用——"Tudou Notepad"。Kotlin作为Google官方推荐的Android开发语言,以其简洁、安全和交互性强的特点深受开发者喜爱。下面,我们将详细...

    清华同方手写板驱动

    【清华同方手写板驱动】是专门为清华同方荀子笔标准版设计的一款驱动程序,它是连接硬件设备——手写板与操作系统之间的桥梁,确保手写板在计算机上能够正常工作并提供良好的手写识别功能。这款驱动适用于那些希望在...

    SimpleToDo:使用KOTLIN和MVVM最简单的笔记应用POC

    《使用Kotlin和MVVM构建最简单的笔记应用POC——SimpleToDo详解》 在现代移动应用开发中,Kotlin已经成为Android平台的首选编程语言,以其简洁的语法、强大的功能和安全特性深受开发者喜爱。本篇文章将深入探讨如何...

Global site tag (gtag.js) - Google Analytics