一、模式解析:

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

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

  主要有两个要点

  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. LeetCode 263 Ugly Number

    Problem: Write a program to check whether a given number is an ugly number. Ugly numbers are positiv ...

  2. eclipse的使用一

    The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files ...

  3. 由浅入深剖析.htaccess

    转自:http://blog.csdn.net/21aspnet/article/details/6908025 [-] htaccess文件使用前提 htaccess基本语法介绍 现学现用学习正则表 ...

  4. Linux Free命令各数字含义及Buffer和Cache的区别

    Linux Free命令各数字含义及Buffer和Cache的区别 Free 命令的各数字含义 命令演示 [root@vm1 ~]# free total used free shared buffe ...

  5. java Http原生 Get 和Post 支持代理认证

    import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import ...

  6. REORG TABLESPACE on z/os

    这个困扰了我两天的问题终于解决了,在运行这个job时:总是提示 A REQUIRED DD CARD OR TEMPLATE IS MISSING NAME=SYSDISC A REQUIRED DD ...

  7. 有关Oracle数据库

    创建数据库(DCA):http://jingyan.baidu.com/article/cbcede07cf42ef02f40b4dc2.html 创建表(连接数据库,sql创建数据表):http:/ ...

  8. location url 反向代理到来机的其它端口 gitlab

    location /nexus { proxy_pass http://127.0.0.1:8081/nexus; } [root@GitMaven conf]# pwd /var/opt/gitla ...

  9. MVC学习笔记---MVC框架执行顺序

    一.把路由添加到路由表, 二.注册ControllerBuilder(老板)和默认工厂(DefaultControllerFactory) 2.1默认工厂获取可以创建的Controller. 三.由于 ...

  10. OCJP(1Z0-851) 模拟题分析(四)over

    Exam : 1Z0-851 Java Standard Edition 6 Programmer Certified Professional Exam 以下分析全都是我自己分析或者参考网上的,定有 ...