`
dengminhui
  • 浏览: 167963 次
  • 来自: ...
社区版块
存档分类
最新评论

Bridge模式学习笔记

阅读更多

public class SmartEditor implements Editor { private static Editor textEditor = new TextEditor(); private static Editor xmlEditor = new XMLEditor(); public void openFile(String path) { if (path.endsWith(".xml")) { xmlEditor.openFile(path); } else { textEditor.openFile(path); } } }


  

 

 小时候我们都用蜡笔画画,一盒蜡笔12种颜色。一开始我都是用最小号的蜡笔画个太阳公公、月亮婆婆足够了。后来开始画一些抽象派的作品,就得换中号的了,要不然画个背景都要描半天,好一盒中号的也是12种颜色。再后来我开始转向豪放派,中号就有些捉襟见肘了,只好换大号的了,好一盒大号的也只有12种颜色。你看,像我这样不太出名的画家就需要36种画笔,哇,太麻烦了。但是据我观察,另一些比我出名的画家倒是没有这么多笔,他们只有几把刷子和一些颜料,这样就解决了蜡笔的种类爆炸问题。

这是在学习Bridge模式时我们经常会举的例子。12*3与12+3的区别让我们认识这种模式的强大。

 Editor接口

 

package com.gemplus.editor; public abstract interface Editor { public void openFile(String path); }

 


 

 

 

 TextEditor实现

 

package com.gemplus.editor; public class TextEditor implements Editor { public void openFile(String path) { System.out.println("Open file with Text Editor. FileName: " + path); } }

 


  

  XMLEditor实现

 

package com.gemplus.editor; public class XMLEditor implements Editor { public void openFile(String path) { System.out.println("Open file with XML Editor. FileName: " + path); } }


 

 

 

 Client调用

package com.gemplus.editor; public class Client { public static void main(String[] args) { Editor xmlEditor = new XMLEditor(); xmlEditor.openFile("test.xml"); Editor textEditor = new TextEditor(); textEditor.openFile("test.txt"); } }


 

 

 

 

到目前为止,我们什么模式也没用到。不过我们还是用到了一项伟大的技术多态,还有就是对接口编程。代码写的还算优雅,只是没有写注释。

接下来我们要增加一个功能,与其说是功能,不如说是一项约束。就是,我不希望客户端了解那些文件要由xmlEditor打开,哪些由textEditor打开。但是总要有人知道,对吧?这项看似直观的约束往往被忽略,或者在潜意识中没有意识到。为了简单起见,我们引入一个简单工厂EditorImpl

 

 

 

 Client也要做相应修改

 

public class Client { public static void main(String[] args) { Editable editableText = new FileEditable(new TextEditor(), "test.txt"); Editable editableXML = new FileEditable(new XMLEditor(), "test.xml"); editableText.open(); editableXML.open(); } }

 

 输出仍然没有变化。(前面做的其实也可以算作是重构吧,可观察行为没有变化)不得不承认,现在客户端又需要了解什么样的文件用什么编辑器打开了。但是一个小的变化就可以避免这一点。

 

 

public FileEditable(String filePath) { this.filePath = filePath; if (filePath.endsWith(".xml")) { editor = new XMLEditor(); } else { editor = new TextEditor(); } }

  

现在该是增加功能的时候了。现在我们要求,用户不但可以打开文件也有可能用这个Editor来编辑一段文字,即字符串。我们假设,所有的Editor都可以编辑文件和字符串。我们为Editor增加一个方法:openString。前面我们说了,Bridge模式中有两个继承体系,两边可以独立变化。现在我们有了两个Editable,即两种可编辑体:文件和字符串。也可以看出我们当初把Editable封装起来多么的英明神武啊!!

Editable的继承体系中又增加了一员:StringEditable

虽然我前面已经说了,AbstractionImplementor的聚合关系可以由派生类RefinedAbstractionImplementor的聚合关系代替,为了与经典模式类图保持尽量的相似,以便大家容易理解,我们还是在StringEditableFileEditable上面加了一层:EditableImpl

 

 

 

 

 

 

 

输出

Open file with XMLEditor. FileName: test.xml

Open file with Text Editor. FileName: test.txt

 

分享到:
评论

相关推荐

    设计模式学习笔记总结

    这里我们聚焦于C#语言中的设计模式学习笔记,涵盖了多种经典的设计模式,如合成模式、桥梁模式、装饰模式、享元模式、门面模式、命令模式、工厂方法、策略模式、代理模式以及状态模式。下面将对这些模式逐一进行详细...

    设计模式学习笔记大全

    以上就是压缩包中的设计模式学习笔记涉及到的主要内容。通过对这些模式的理解和应用,开发者可以更好地解决软件设计中的问题,提升软件的质量和可维护性。每种模式都有其适用场景,理解其背后的意图和应用场景是关键...

    设计模式学习笔记

    ### 设计模式学习笔记 #### 一、简单工厂模式 (Simple Factory) **类图与描述:** 简单工厂模式的核心在于存在一个工厂类,这个工厂类能够根据不同的输入参数返回不同的对象实例。简单工厂模式并不涉及继承关系,...

    设计模式之美—学习笔记

    在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...

    GoF 23种设计模式学习笔记

    "GoF 23种设计模式学习笔记" 是一个深入探讨这23个经典设计模式的资源,这些模式最初由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位作者在1994年的著作《设计模式:可复用面向对象软件的基础》中...

    《设计模式》学习笔记

    ### 设计模式学习笔记 #### 引言 设计模式(Design Patterns)是在软件设计领域内广泛应用的一种实践指南,它提供了一系列解决常见问题的方案。设计模式可以被理解为面向对象软件设计的经验总结,是对特定面向对象...

    23中设计模式学习笔记.docx

    ### 23种设计模式学习笔记 #### 一、软件设计模式的概念与意义 **概念:** 软件设计模式(Software Design Pattern),又称设计模式,是一套被广泛采用、经过整理和分类的代码设计经验总结。它针对软件设计过程中...

    300Java设计模式部分学习笔记

    以下是一些在尚学堂300Java设计模式部分学习笔记中涉及的设计模式的知识点: 创建型模式: 创建型模式主要解决对象创建的问题,确保系统的灵活性和封装创建细节。学习笔记中提到了5种创建型模式: 1. 单例模式...

    设计模式学习笔记 .txt

    #### Bridge(桥接)模式 - **定义**:将抽象部分与它的实现部分分离,使它们都可以独立变化。 - **实现方式**:通过分离接口和实现,使得抽象和实现可以独立变化。 - **特点**: - 抽象和实现分离,提高可扩展性。...

    23个设计模式图解--学习笔记

    在《23个设计模式图解--学习笔记》中,我们探讨了这些模式,以便于理解和应用到实际开发中。以下是这23个设计模式的详细说明: 1. **工厂方法**(Factory Method):定义一个用于创建对象的接口,让子类决定实例化...

    学习笔记-问卷.docx

    ### HCIA学习笔记知识点梳理 #### 一、企业网络架构介绍 - **大型网络基本架构**:主要包括核心层(Core Layer)、汇聚层(Aggregation Layer)以及接入层(Access Layer)。 - **核心层**:负责高速数据转发,通常位于...

    良葛格DesignPattern学习笔记

    ### 设计模式学习笔记知识点概览 #### 一、引言 设计模式是软件工程领域中一种非常重要的概念,它代表了一种最佳实践的方式,帮助开发者解决特定问题时能够更加高效、灵活。良葛格的《Design Pattern学习笔记》不仅...

    JAVA与模式读书笔记。

    总之,《JAVA与模式》读书笔记提供了一个学习和应用设计模式的宝贵资源,对于Java开发者来说,理解和掌握这些模式不仅能够提升编程技能,也能使他们能够设计出更高效、更易于维护的软件系统。通过不断的实践和探索,...

    Java设计模式尚硅谷笔记

    本笔记主要涵盖了多种经典的设计模式,以下是对这些模式的详细解释: 1. 单例模式(Singleton):确保一个类只有一个实例,并提供全局访问点。在Java中,通常通过双重检查锁定(Double-Check Locking)或静态内部类...

    台湾人写的设计模式笔记

    通过阅读这份笔记,读者不仅可以学习到设计模式的基本概念,还能了解到如何在Java环境中实际运用这些模式,提升编程技能。设计模式的学习和掌握是成为一名优秀程序员的必经之路,它们能帮助我们写出更高效、更灵活、...

    设计模式的读书总结笔记

    2. 结构型模式:包括适配器模式(Adapter)、桥接模式(Bridge)、装饰模式(Decorator)、组合模式(Composite)、外观模式(Facade)、享元模式(Flyweight)和代理模式(Proxy)。它们处理对象之间的关系,如组合...

    23种面向对象设计模式

    文档中的“23种设计模式学习笔记.doc”可能包含了对这23种模式的详细解释和实例,而“设计模式之我爱我家.doc”可能从一个更生活化的角度来阐述设计模式的概念。“软件23种设计模式,超级经典的.pdf”可能是对这些...

    非常详细的-Docker-学习笔记.docx

    "非常详细的Docker学习笔记" Docker是开源的容器虚拟化平台,主要由两个部分组成:Docker和Docker Hub。Docker是一个容器虚拟化平台,Docker Hub是一个用于分享、管理Docker容器的SaaS平台。Docker使用客户端-...

    2023年photoshop学习笔记.doc

    Photoshop学习笔记 本篇笔记总结了Photoshop软件的学习笔记,旨在系统地掌握Photoshop软件的使用,提高软件操作能力。笔记分为三个部分:概括介绍部分、软件基础学习部分、软件归纳学习部分。 概括介绍部分对Photo...

Global site tag (gtag.js) - Google Analytics