原文:http://www.linkedkeeper.com/detail/blog.action?bid=26

You are here:  架构&实践 - 设计模式
Frank     2015/08/18    阅读: 350    评论: 0    收藏: 0
 

定义将抽象部分与实现部分分离,使它们都可以独立的变化。结构示例Implementor:定义实现接口interface Implementor { // 实现抽象部分需要的某些具体功能 public void operationImpl();}Abstraction:定义抽象接口abstract class Abstraction { // 持有一个 Implementor 对象,...

定义

将抽象部分与实现部分分离,使它们都可以独立的变化。

结构

示例

Implementor:定义实现接口

1
2
3
4
interface Implementor {
    // 实现抽象部分需要的某些具体功能
    public void operationImpl();
}

Abstraction:定义抽象接口

1
2
3
4
5
6
7
8
9
10
11
12
13
abstract class Abstraction {
    // 持有一个 Implementor 对象,形成聚合关系
    protected Implementor impl;
 
    public Abstraction(Implementor impl) {
        this.impl = impl;
    }
 
    // 可能需要转调实现部分的具体实现
    public void operation() {
        impl.operationImpl();
    }
}

ConcreteImplementor:实现 Implementor 中定义的接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class ConcreteImplementorA implements Implementor {
    @Override
    public void operationImpl() {
        // 真正的实现
        System.out.println("具体的实现A");
    }
}
 
class ConcreteImplementorB implements Implementor {
    @Override
    public void operationImpl() {
        // 真正的实现
        System.out.println("具体的实现B");
    }
}

RefinedAbstraction:扩展 Abstraction 类

1
2
3
4
5
6
7
8
9
10
11
12
class RefinedAbstraction extends Abstraction {
 
    public RefinedAbstraction(Implementor impl) {
        super(impl);
    }
 
    public void otherOperation() {
        // 实现一定的功能,可能会使用具体实现部分的实现方法,
        // 但是本方法更大的可能是使用 Abstraction 中定义的方法
        // 通过组合使用 Abstraction  中定义的方法来完成更多的功能。
    }
}

测试代码

1
2
3
4
5
6
7
8
public class BridgePattern {
    public static void main(String[] args) {
        Implementor impl = new ConcreteImplementorA();
        RefinedAbstraction abs = new RefinedAbstraction(impl);
        abs.operation();
        abs.otherOpertaion();
    }
}

样例

实现部分定义接口

1
2
3
4
interface MessageImplementor {
    // 发送消息
    public void send(String message);
}

抽象部分定义接口

1
2
3
4
5
6
7
8
9
10
11
12
public abstract class AbstractMessage {
    // 持有一个实现部分的对象
    protected MessageImplementor impl;
    // 构造方法,传入实现部分的对象
    public AbstractMessage(MessageImplementor impl) {
        this.impl = impl;
    }
    // 发送消息,转调实现部分的方法
    public void sendMessage(String message) {
        this.impl.send(message);
    }
}

具体的实现发送消息

1
2
3
4
5
6
7
8
9
10
11
public class MessageSMS implements MessageImplementor {
    public void send(String message) {
        System.out.prinlt("使用短信方式发送消息:" + message);
    }
}
 
public class MessageEmail implements MessageImplementor {
    public void send(String message) {
        System.out.println("使用Email方法发送消息:" + message);
    }
}

抽象的消息消息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class CommonMessage extends AbstractMessage {
 
    public CommonMessage(MessageImplementor impl) {
        super(impl);
    }
 
    public void sendMessage(Stirng message) {
        super.sendMessage(message);
    }
}
 
public class UrgencyMessage extends AbstractMessage {
 
    public UrgencyMessage (MessageImplementor impl) {
        super(impl);
    }
 
    public void sendMessage(Stirng message) {
        super.sendMessage(message);
    }
}

转载请并标注:

“本文转载自 http://www.linkedkeeper.com/detail/blog.action?bid=26 (文/Frank)”

Bridge 设计模式的更多相关文章

  1. 【设计模式】Bridge

    前言 Bridge设计模式,将一个复杂类分成可以单独开发的部分.分成的两个部分,abstraction,implementation.字面上是抽象和实现,但不同于抽象方法及其实现.下面摘录Wiki的两 ...

  2. 连载:面向对象的葵花宝典:思考、技巧与实践(39) - 设计原则 vs 设计模式

    它的设计原则,和设计模式,是否该用它? ============================================================================= 在& ...

  3. Reactor构架模式

    http://www.cnblogs.com/hzbook/archive/2012/07/19/2599698.html Reactor框架是ACE各个框架中最基础的一个框架,其他框架都或多或少地用 ...

  4. 如何写出好的Java代码?

    1. 优雅需要付出代价.从短期利益来看,对某个问题提出优雅的解决方法,似乎可能花你更多的时间.但当它终于能够正确执行并可轻易套用于新案例中,不需要花上数以时计,甚至以天计或以月计的辛苦代价时,你会看得 ...

  5. Backbone.js的技巧和模式

    Backbone.js的技巧和模式 Backbone.js的技巧和模式   本文由白牙根据Phillip Whisenhunt的<Backbone.js Tips And Patterns> ...

  6. [源码解析]PyTorch如何实现前向传播(2) --- 基础类(下)

    [源码解析]PyTorch如何实现前向传播(2) --- 基础类(下) 目录 [源码解析]PyTorch如何实现前向传播(2) --- 基础类(下) 0x00 摘要 0x01 前文回顾 0x02 Te ...

  7. Net设计模式实例之桥接模式( Bridge Pattern)

    一.桥接模式简介(Brief Introduction) 桥接模式(Bridge Pattern),将抽象部分与它的实现部分分离,使的抽象和实现都可以独立地变化. Decouple an abstra ...

  8. C++设计模式-Bridge桥接模式

    作用:将抽象部份与它的实现部份分离,使它们都可以独立地变化. 将抽象(Abstraction)与实现(Implementation)分离,使得二者可以独立地变化. 桥接模式号称设计模式中最难理解的模式 ...

  9. 设计模式学习之桥接模式(Bridge,结构型模式)(15)

    参考地址:http://terrylee.cnblogs.com/archive/2006/02/24/336652.html 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化, ...

随机推荐

  1. 解决mac下atom安装插件失败问题

    activate-power-mode的超炫编辑效果打动了我,花时间安装了atom,之后在package,install里面找到了这个插件,但是安装失败,如下图所示: gyp info it work ...

  2. 使用SQL Server 2000索引视图提高性能

    什么是索引视图? 许多年来,Microsoft? SQL Server? 一直都提供创建虚拟表(称为视图)的功能.在过去,这些视图主要有两种用途: 提供安全机制,将用户限制在一个或多个基表中的数据的某 ...

  3. mongodb导出数据

    导出 -d  数据库名 -u 用户名 -p 密码 -c  要导出的表名 -o 要到出的文件地址及类型 C:\Users\Administrator>mongoexport -d fh -u we ...

  4. android版本 busybox

    http://www.busybox.net/downloads/binaries/1.21.1/  根据不同的平台选择busybox已经编译好的

  5. linux cat more less head tail

    cat 命令: cat filename  查看一个文件的内容cat[选项][文件]... -b  对非空白行进行编号,行号从1开始-n  和nl命令差不多,对所有行(包括空白行)进行编号输出显示-E ...

  6. java应用测试报告生成(二):利用ant的build.xml生成测试报告

    1.将写好的项目导出 在工程下会生成一个build.xml的蚂蚁图标的文件. 2.右击该文件,选择run as Ant build 其中的测试目录是可以选择的,如果涉及到顺序也可以调整顺序 3.执行后 ...

  7. POJ 2318 TOYS 叉积

    题目大意:给出一个长方形盒子的左上点,右下点坐标.给出n个隔板的坐标,和m个玩具的坐标,求每个区间内有多少个玩具. 题目思路:利用叉积判断玩具在隔板的左方或右方,并用二分优化查找过程. #includ ...

  8. Swift 学习笔记(五)

    126. 协议(Protocols) 协议语法(Protocol Syntax) 属性要求(Property Requirements) 方法要求(Method Requirements) Mutat ...

  9. 学习笔记——Windows下cocos2d-x,eclipse中自编译

    cocos2d-x创建的安卓项目导入eclipse后. 在项目属性中配置Builders. 在eclipse编译还需要配置相应的变量,即后面提到的cygwin编译中要添加的变量. D:/cygdriv ...

  10. java 基础的几种算法

    1:冒泡排序:2个之间进行循环筛选   public void sort(int[] a) { int temp = 0; for (int i = a.length - 1; i > 0; i ...