一、模式解析:

  策略模式一节讲过,通过扩展持有者,使持有者形成抽象类,然后实现多个具体持有者,策略模式可以转化为桥接模式。

  桥接模式定义为:将抽象部分与实现部分分离,使它们都可以独立的变化,在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,使用桥接模式可以应对多维度的变化。

  主要有两个要点

  1、有两个维度的变化,彼此的变化应该不会受到对方的干扰

  2、通过接口进行关联,共有n*m种组合

  3、其中一个维度,保存这另外一个维度的引用

二、模式代码:

  维度一

interface Implementor {
public void operacitonImpl();
}
class ImplementorA implements Implementor{
@Override
public void operacitonImpl() {
System.out.println("ImplementorA的方法被执行");
}
}
class ImplementorB implements Implementor{
@Override
public void operacitonImpl() {
System.out.println("ImplementorB的方法被执行"); }
}

  维度二、

抽象代码,保存了维度一的引用,并且可以通过人工设置

public abstract class Abstraction {
protected Implementor implementor;
public void setImplementor(Implementor implementor){
this.implementor=implementor;
}
public void operation(){};
}
public class RefinedAbstraction extends Abstraction {
@Override
public void operation() {
System.out.println("RefinedAbstraction被执行了");
implementor.operacitonImpl();
}
}

客户端代码:

执行维度二,通过维度二调用维度一

public class Client {
public static void main(String[] args) {
Abstraction abstraction=new RefinedAbstraction();
abstraction.setImplementor(new ImplementorA());
abstraction.operation();
}
}

三、应用场景

话接上一章策略模式,银行系统中转账不仅只有一种,比如有行内转账,跨行转账,二代支付等方式,每一种转账方式都需要计算手续费,因此在此我们将策略模式改造为桥接模式,因为手续费维度并没有变化,因此此处只需要修改转账维度

四,场景代码

定义转账接口,保留计算手续费接口

public abstract class ITransfer {
protected IFee feeImpl;
public void setIFee(IFee feeImpl){
this.feeImpl=feeImpl;
}
public abstract void execute();
}

行内转账方法

public class TransferIn extends ITransfer {
public void execute(){
System.out.println("跨行转账开始。。。。");
int fee=feeImpl.getFee();
System.out.println("手续费为:"+fee);
System.out.println("跨行转账完成。。。。");
}
}

跨行转账方法

public class TransferOut extends ITransfer {
public void execute(){
System.out.println("跨行转账开始。。。。");
int fee=feeImpl.getFee();
System.out.println("手续费为:"+fee);
System.out.println("跨行转账完成。。。。");
}
}

客户端调用,可能是网银,柜面等渠道

public class Client {
public static void main(String[] args) {
ITransfer transfer=new TransferOut();
transfer.setIFee(new FeeFromRemote());//项目中手续费计算方式通常由框架进行注入
transfer.execute();
}
}

执行结果

跨行转账开始。。。。
正在从核心获取手续费
手续费为:100
跨行转账完成。。。。

五、说明

实际使用过程中,并不会向Client中去初始化转账方法,然后直接设置手续费计算,通常转账作为一个路径资源进行访问,手续费计算方法通过spring的进行IOC注入

[工作中的设计模式]桥接模式bridge的更多相关文章

  1. 转:设计模式-----桥接模式(Bridge Pattern)

    转自:http://www.cnblogs.com/houleixx/archive/2008/02/23/1078877.html 记得看原始链接的评论. 学习设计模式也有一段时间了,今天就把我整理 ...

  2. 设计模式 -- 桥接模式(Bridge)

    写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------主要内容包括: 初始桥接模式 ...

  3. [工作中的设计模式]原型模式prototype

    一.模式解析 提起prototype,最近看多了js相关的内容,第一印象首先是js的原型 var Person=function(name){ this.name=name; } Person.pro ...

  4. [工作中的设计模式]策略模式stategy

    一.模式解析 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化. 策略模式的关键点为: 1.多种算法存在 2.算法继承同样的接口 ...

  5. 设计模式--桥接模式Bridge(结构型)

    一.概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或者多个维度的变化,如何应对这种"多维度的变化",就可以利用桥接模式. 引例: 设想如果要绘制矩形.圆形.椭圆.正方形,我 ...

  6. [工作中的设计模式]解释器模式模式Interpreter

    一.模式解析 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器.客户端可以使用这个解释器来解释这个语言中的句子. 以上是解释器模式的类图,事实上我 ...

  7. [工作中的设计模式]中介模式模式Mediator

    一.模式解析 用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互. 中介模式又叫调停者模式,他有如下特点: 1.有多个系统或者对 ...

  8. C#设计模式——桥接模式(Bridge Pattern)

    一.概述在软件开发中,我们有时候会遇上一个对象具有多个变化维度.比如对汽车对象来说,可能存在不同的汽车类型,如公共汽车.轿车等,也可能存在不同的发动机,如汽油发动机.柴油发动机等.对这类对象,可应用桥 ...

  9. 大话设计模式--桥接模式 Bridge -- C++实现实例

    1. 桥接模式: 将抽象部分与它的实现部分分离,使它们都可以独立的变化. 分离是指 抽象类和它的派生类用来实现自己的对象分离. 实现系统可以有多角度分类,每一种分类都有可能变化,那么把这种多角度分离出 ...

随机推荐

  1. eclipse快捷键Alt + / 失效

    最近电脑上的Eclipse没有了自动提示功能,也不是全部不提示,大多数情况下按下"alt+/"键还会产生提示,但是当我在java项目中邪main方法和syso的时候,"a ...

  2. oracle默认配置ora文件位置

    unix:$ORACLE_HOME/dbsnt:c:\Oracle\ora81\database create spfile from pfile = '/home/oracle/initora11g ...

  3. 解药还是毒药(codevs 2594)

    2594 解药还是毒药  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description Smart研制出对 ...

  4. CSS居中布局总结

    居中布局 <div class="parent"> <div class="child">demo</div> </d ...

  5. TCP UDP 协议的区别和联系

    TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接.一个TCP连接必须要经过三次“对话”才能建立起 ...

  6. Faster-rnnlm代码分析1 - 词表构建,Nnet成员

    https://github.com/yandex/faster-rnnlm     Gdb ./rnnlm r -rnnlm model-good.faster -train thread.titl ...

  7. **PHP中替换换行符

    PHP中替换换行符 php 不同系统的换行不同系统之间换行的实现是不一样的linux 与unix中用 \nMAC 用 \rwindow 为了体现与linux不同 则是 \r\n所以在不同平台上 实现方 ...

  8. Delphi数组

    参考:http://www.cnblogs.com/huangjacky/archive/2009/12/21/1628833.html 数组就是一堆相同特性数据的一个组合,也就是每个元素的类型必须是 ...

  9. 【JAVA集合框架之List】

    一.List接口概述. List有个很大的特点就是可以操作角标. 下面开始介绍List接口中相对于Collection接口比较特别的方法.在Collection接口中已经介绍的方法此处就不再赘述. 1 ...

  10. 团队作业-第二周-SRS文档

    移动课堂点名的用例图: