`
flustar
  • 浏览: 96817 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

设计模式学习笔记(四)—Bridge桥接模式

阅读更多

   《设计模式》一书对Bridge是这样描述的:

将抽象与其实现解耦,使它们都可以独立地变化。

大致意思是说:将一组实现与另一组使用他们的对象分离。这里的实现指的是抽象类及其

派生类用来实现自己的对象(而不是抽象类的派生类,这些派生类被称为具体类)。下面

是《Design Patterns Explained》书中的例子。其结构图如下:
  

下面是它的实现:

abstract class Shape{

    protected Drawing myDrawing;

    abstract public void draw();

    Shape(Drawing drawing){

        myDrawing=drawing;

    }

    protected void drawLine(){

        myDrawing.drawLine();

    }

    protected void drawCircle(){

        myDrawing.drawCircle();

    }

}

class Rectangle extends Shape{

    public Rectangle(Drawing darw){

        super(darw);

    }

    public void draw(){

        drawLine();

        drawLine();

        drawLine();

        drawLine();

    }

}

 class Circle extends Shape{

    public Circle(Drawing draw){

        super(draw);

    }

    publicvoid draw(){

        myDrawing.drawCircle();

    }

}

abstract class Drawing{

    abstract public void drawLine();

    abstract public void drawCircle();

}

class V1Drawing extends Drawing{

    public void drawLine(){

        DP1.draw_a_line();

    }

    public void drawCircle(){

        DP1.draw_a_circle();

    }

}

class V2Drawing extends Drawing{

    public void drawLine(){

        DP2.drawLine();

    }

    public void drawCircle(){

        DP2.drawCircle();

    }

}

class DP1{

    public static void draw_a_line(){

        System.out.println("使用DP1的draw_a_line()画线");

    }

    public static void draw_a_circle(){

        System.out.println("使用DP1的draw_a_circle()画圆");

    }

}

class DP2{

    public static void drawLine(){

        System.out.println("使用DP2的drawLine()画线");

    }

    public static void drawCircle(){

        System.out.println("使用DP2的drawCircle()画圆");

    }

}

 public class BridgeClient {

    public static void main(String[] args) {

        Drawing draw1=new V1Drawing();

        Drawing draw2=new V2Drawing();

        Shape shape1=new Rectangle(draw1);

        shape1.draw();

        Shape shape2=new Circle(draw2);

        shape2.draw();

    }

}

输出结果如下

使用DP1draw_a_line()画线

使用DP1draw_a_line()画线

使用DP1draw_a_line()画线

使用DP1draw_a_line()画线

使用DP2drawCircle()画圆

在这个例子中Shape对象实际上是一个RetangleCircle对象Client并不知道到底是那个因为它们看起来都一样。Drawing实际上是一个V1DrawingV2Drawing,Shape对象并知道到底是哪个因为它们看起来都一样。DP1或DP2使用它的Drawing对象知道是哪一个。Shape是事物的抽象,Drawing是实现或者操作事物方法的抽象。他们两个都可以独立地变化。正如例子中所说那样,我们可以输出一个矩形可以使用V1Drawing也可以使用V2Drawing来完成,输出一个圆形也是一样都有两种方法。Bridge模式遵循了设计模式中两条基本策略:找出变化并封装之和优先使用对象聚集,而不是类继承。

    小结:Bridge模式是一种抽象与其实现相分离的模式。它主要应用于:当事物是一组变化量,和对这些事物的操作方法(实现)也是一组变化量的情况,也就是说它们都是多变的。

分享到:
评论

相关推荐

    设计模式学习笔记总结

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

    设计模式学习笔记大全

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

    设计模式学习笔记

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

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

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

    GoF 23种设计模式学习笔记

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

    23种面向对象设计模式

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

    《设计模式》学习笔记

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

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

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

    设计模式学习笔记 .txt

    根据提供的文件信息,我们可以将设计模式分为两大类:创建型模式和结构型模式,并在此基础上进一步探讨每种设计模式的特点及应用场景。 ### 创建型模式 #### Singleton(单例)模式 - **定义**:确保一个类仅有一...

    设计模式的读书总结笔记

    总之,“设计模式的读书总结笔记”是一份宝贵的资源,它可以帮助开发者系统地学习和掌握设计模式,提升软件设计的质量和效率。无论是初学者还是经验丰富的开发者,都可以从中受益匪浅。通过深入学习和实践,我们可以...

    台湾人写的设计模式笔记

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

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

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

    《设计模式:可复用面向对象软件的基础》学习并理解 23 种设计模式

    学习设计模式对于软件开发人员来说至关重要,主要基于以下几点理由: - **经验借鉴**:设计模式是基于众多专家的经验和智慧,提供了经过实践检验的解决方案。 - **提高可维护性和可复用性**:通过遵循已知的最佳...

    Java设计模式尚硅谷笔记

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

    设计模式笔记

    结构型设计模式关注如何组合对象和类以构建更大的结构,例如适配器模式(Adapter)、装饰器模式(Decorator)和桥接模式(Bridge)。行为型设计模式则关注对象之间的职责分配和通信,比如观察者模式(Observer)、...

    图解Java设计模式笔记总结word版本.rar

    5. **学习设计模式的意义** - 提高代码的可读性和可维护性,使得其他人更容易理解和修改代码。 - 提升软件设计质量,避免重复造轮子,提高开发效率。 - 有助于软件架构师进行系统设计,使系统更加灵活、可扩展。 ...

    Head First 设计模式 扫描版

    尽管扫描版可能不如实体书方便翻阅和做笔记,但它仍然可以让读者随时随地进行学习,加深对设计模式的理解和应用。 总的来说,《Head First 设计模式》是一本值得每一个程序员拥有的书籍,无论你是初学者还是经验...

    23种设计模式的解析与Cpp实现

    设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决常见问题的最佳实践。...通过“23种设计模式的解析与C++实现.pdf”和“Source”文件,读者可以深入学习并实践这些模式,提升自己的编程技能。

    《.NET设计模式》文档

    步步为营 .NET 设计模式学习笔记这个文件名暗示了文档可能采用逐步深入的方式,从基础概念开始,逐步引导读者理解每个模式的用途、实现方式以及在实际.NET项目中的应用。可能包含详细的代码示例,帮助读者通过实践来...

Global site tag (gtag.js) - Google Analytics