桥接模式,初学的时候事实上非常不理解为什么要把这个模式命名为桥接模式,脑海里突然联想到。事实上我学习是一件比較痛苦的事情,由于我必需要知道来龙去脉才干学的进去,所以,非常快我就对这个命名产生了兴趣,桥接?

嗯,桥接!先把桥字换成连字,连接?桥接?桥接和连接最大的不同是桥接是降具有同样模式的两种事物连接起来,这是我依据词典的解释得出的。

好吧,具有同样模式,瞬间便想到了接口,是不是有职业病?

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

                                                                    ——《设计模式》GOF

再结合GOF的设计模式说明,非常easy就理解为什么是命名为桥接。

抽象的是接口,实现的是类。

在我们的代码中,当传入对象參数而不是基本数据类型參数的时候,我们有时候会传入2种类型的參数。比方

public void menthd(List list)

public void method1(ArrayList arrayList)

这两种有一个最大的差别,ArrayList  是 List 的实现类,当我们调用method方法的时候,你能够传入的參数是ArrayList  和  LinkedList,可是调用另外一种方法你仅仅能传入ArrayList,这样非常明显就有缺陷了,当ArrayList不满足我们需求的时候,我们必需要重写一个method1方法,这样对我们的代码结构是非常不利,也违法了JAVA设计的开闭原则。

拿出这个我们写出实际的代码,当然我们这里不再用ArrayList做演示。。

先定义出接口

public interface TestInterface {
public void method();
}

再来一个实现类

public class TestInterfaceImpl1 implements TestInterface{

	@Override
public void method() {
System.out.println("需求1");
} }

调用类:

public class Bridge {
public void test(TestInterfaceImpl1 impl1){
impl1.method();
}
}

測试代码:

public class Test {
public static void main(String[] args) {
Bridge bridge = new Bridge();
TestInterfaceImpl1 impl1 = new TestInterfaceImpl1();
bridge.test(impl1); }
}

输出:需求1

然后,我们的需求改变,我们要将TestInterface 中method方法实现改为还有一种需求2的实现方式,那么你这里须要改动的地方就比較多了。。。

必需要做的事情,新增实现类。

public class TestInterfaceImpl2 implements TestInterface{
@Override
public void method() {
System.out.println("需求2");
}
}

然后我们还须要修改Bridge,要新增一个方法去传入TestInterfaceImpl2 的对象,修改原来的代码是我们最不愿意看到的,当然你也能够新增一个适配器类去实现,可是,假设当时我们的Bridge设计之初就不是这样设计,而是传入接口的引用对象呢?

将Bridge改动成

public class Bridge {
public void test(TestInterface impl){
impl1.method();
}
}

这样,你出现新需求的时候就无需修改原先的代码。。

測试类:

public class Test {
public static void main(String[] args) {
Bridge bridge = new Bridge();
TestInterface impl1 = new TestInterfaceImpl1();
bridge.test(impl1); TestInterface impl2 = new TestInterfaceImpl2();
bridge.test(impl2); }
}

输出:

需求1

需求2

这就是GOF所说的将抽象部分与实现部分分离,使它们都能够独立的变化。

在这套代码中,抽象的是接口,将抽象的接口与实现部分分离,传入的是向上引用的类对象,这样你的实现类再怎么改变对于整套代码都不会有不论什么影响。。。。。

这就是桥接模式!

面向对象,真不简单!

菜鸟版JAVA设计模式-从抽象与实现说桥接模式的更多相关文章

  1. 菜鸟版JAVA设计模式—从买房子看代理模式

    今天学习了代理模式. 相对于适配器模式,或者说装饰器模式,代理模式理解起来更加简单. 代理这个词应该比較好理解,取代去做就是代理. 比方,我们买卖房子,那么我们会找中介,我要卖房子,可是我们没有时间去 ...

  2. 菜鸟版JAVA设计模式—外观模式

    外观模式是一种比較easy理解的模式,作用非常easy.就是解耦合. 结构也是非常easy,一个外观类.这个外观类持有非常多的业务类. 再由客户类去调用这个外观类去实现一些列的业务操作... 这个模式 ...

  3. Java 设计模式之抽象工厂模式(三)

    原文地址:Java 设计模式之抽象工厂模式(三) 博客地址:http://www.extlight.com 一.前言 上篇文章 <Java 设计模式之工厂模式(二)>,介绍了简单工厂模式和 ...

  4. Java 设计模式系列(二十)状态模式

    Java 设计模式系列(二十)状态模式 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式.状态模式允许一个对象在其内部状态改变的时候改 ...

  5. Java 设计模式系列(十二)策略模式(Strategy)

    Java 设计模式系列(十二)策略模式(Strategy) 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以 ...

  6. Java 设计模式系列(十四)命令模式(Command)

    Java 设计模式系列(十四)命令模式(Command) 命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复 ...

  7. Java 设计模式系列(十七)中介者模式

    Java 设计模式系列(十七)中介者模式 用一个中介对象来封装一系列的对象交互.中介者使得各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互 一.中介者模式结构 Media ...

  8. Java 设计模式系列(八)装饰者模式

    Java 设计模式系列(八)装饰者模式 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案.Decorator 或 Wrapper 一.装饰模 ...

  9. 深入探索Java设计模式(三)之装饰器模式

    装饰器模式使你可以在运行时使用类似于对象组成的技术来装饰类.这在我们希望实例化具有新职责的对象而无需对基础类进行任何代码更改的情况下尤其有用.本文是在学习完优锐课JAVA架构VIP课程—[框架源码专题 ...

随机推荐

  1. android用于打开各种文件的intent

    import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.n ...

  2. 北京联通100M光纤宽带需邀请函 实际速率12MB/S - OFweek光通讯网

    [新提醒]随身wifi无法使用FAQ(不断更新中~~~~~~) - 使用问题 - 360官方论坛 undefined 北京联通100M光纤宽带需邀请函 实际速率12MB/S - OFweek光通讯网 ...

  3. TypeError: Cannot read property &#39;style&#39; of null 错误解决

    错误信息例如以下: JSP代码例如以下: <c:if test ="${not empty excelErrors}"> <div id="excelE ...

  4. c#控制台应用程序-“进入指定日期检查出星期几”

    这涉及一个算法: 基姆拉尔森计算公式 W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1) mod 7 在公式中d表示日期中的日数.m表示月份数.y表示年数. 注意:在公式 ...

  5. 2 WAN 和1 Evo/3g Routeros PCC 方法负载平衡

    陕西中际现代包装科技:Routeros  2 WAN 和1 Evo/3g PCC 方法负载平衡 (Routeros多线负载平衡) 我们将要讨论2Wan和1个Evo/3G 的负载平衡.负载平衡就是在不同 ...

  6. 【Java探索道路安全系列:Java可扩展的安全架构】一间:Java可扩展的安全体系结构开始

    笔者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell [ ...

  7. 碎碎念,浅饮-------Day30

    这不是关于技术的文章,它偏离了我原来的计划轨迹.但,我相信这将是远远超出了技术的意义使我无论什么价格值. 高考已经开始,不知道在这片宁静的夜空下有多少人已经美美的睡了,香甜憨然.又有多少人这睡着的眼角 ...

  8. SWT中Display和Shell是个什么东东

    Display:与操作系统沟通的桥梁 我们在前面说过,每个swt程序在最开始都必须创建一个Display对象.Display对象起什么作用呢?它是swt与操作系统沟通的一座桥梁.它负责swt和操作系统 ...

  9. WPF换肤之四:界面设计和代码设计分离

    原文:WPF换肤之四:界面设计和代码设计分离 说起WPF来,除了总所周知的图形处理核心的变化外,和Winform比起来,还有一个巨大的变革,那就是真正意义上做到了界面设计和代码设计的分离.这样可以让美 ...

  10. 64位CentOS5.6安装Mysql 5.5.11GA

    1.更新并查看当前CentOS版本是否为5.6yum updatelsb_release -a 2.下载文件下载 bison-2.4.3.tar.gz到/usr/local/src下载 cmake-2 ...