参考于 :

  大话设计模式

  马士兵设计模式视频

  

    

  写在开头: 桥接模式主要用于一件事物分成了两个维度,进行排列组合,比如礼物,可以分成优雅的礼物(抽象),花(具体),排列组合优雅的花!

1.为什么使用桥接模式 

  小丁追小彭,送礼物必不可少。面向对象的思维,如何去实现这个礼物,先定义一个礼物的接口或抽象类,然后只要实现了这个接口那就算一个礼物。

  小彭是一个精致的女孩,我要送一个精致的礼物,好,按照上面的思路,实现礼物接口。小丁进了花店,哇,花朵,嗯,花朵也算礼物,实现礼物接口。

  小丁想挑精致的花朵,用面向对象的思想,嗯,直接继承精致的礼物就实现了精致花朵。

  

  但是,小丁仔细一想,这只是花店,只有花朵,实现起来不复杂,如果进了一家百货商店,那么就要这样实现,相当麻烦。

  

2.使用桥接模式

  使用前先解释上面图片中的话:

  将抽象部分和实现部分分离 : 上面例子中,精致的礼物就是一个比较抽象的部分,精致的花就是一个实现部分,上面例子中,这两个是继承关系,现在需要进行分离。

  使用聚合关系来替换继承关系

  下面代码中Gift接口可去,去了后类的关系就和最上面那张UML一样

  下面代码的UML类图

  

package com.dingyu;
/**
* 实现了这个接口,表示你是一个礼物
* @author dingyu
*
*/
public interface Gift { }
package com.dingyu;
/**
* 一个精致的礼物
* 抽象部分有一个具体的部分
* @author dingyu
*
*/
public class GraceGift implements Gift {
private GiftImpl giftImpl; public GraceGift(GiftImpl giftImpl) {
this.giftImpl = giftImpl;
} public GiftImpl getGiftImpl() {
return giftImpl;
} public void setGiftImpl(GiftImpl giftImpl) {
this.giftImpl = giftImpl;
} } 
package com.dingyu;
/**
* 具体的礼物
* @author dingyu
*
*/
public interface GiftImpl { }
package com.dingyu;

public class Flower implements GiftImpl {

}
package com.dingyu;

public class Shorts implements GiftImpl {

}
package com.dingyu;

/**
* 男孩类
*
* @author dingyu
*
*/
public class Boy {
private String name = "xiaoding"; public void sendGift() {
Gift gift1;
Gift gift2;
gift1 = new GraceGift(new Shorts());
gift2 = new GraceGift(new Flower());
}
}

  

Java设计模式---桥接Bridge模式的更多相关文章

  1. Java 实现桥接(Bridge)模式

    类图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamp3d21scDQ1Ng==/font/5a6L5L2T/fontsize/400/fill/I0 ...

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

    1.概述: 桥接模式:把抽象和行为分离开来,中间需要某个介质来连接抽象化和行为化.此模式的概述听起来非常像适配器模式,不要搞混了,虽然都是借用中间介质,但意义不同.最典型的桥接模式就是:JDBC.通过 ...

  3. 【设计模式】Java设计模式 - 桥接模式

    [设计模式]Java设计模式 - 桥接模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起 ...

  4. 设计模式初探-桥接(Bridge)模式

    桥接(Bridge)模式,又称Handle/Body模式,属于对象结构型模式.用于将抽象部分与它的实现部分分离,使它们都可以独立地变化.比如常见的电脑窗口界面,不同的操作系统其窗口界面绘制的原理肯定不 ...

  5. Java设计模式——装饰者模式

    JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式 ...

  6. 浅析JAVA设计模式之工厂模式(一)

    1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...

  7. JAVA设计模式--装饰器模式

    装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...

  8. 折腾Java设计模式之建造者模式

    博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...

  9. 折腾Java设计模式之备忘录模式

    原文地址:折腾Java设计模式之备忘录模式 备忘录模式 Without violating encapsulation, capture and externalize an object's int ...

随机推荐

  1. 死磕 java集合之ConcurrentLinkedQueue源码分析

    问题 (1)ConcurrentLinkedQueue是阻塞队列吗? (2)ConcurrentLinkedQueue如何保证并发安全? (3)ConcurrentLinkedQueue能用于线程池吗 ...

  2. python接口自动化(二十二)--unittest执行顺序隐藏的坑(详解)

    简介 大多数的初学者在使用 unittest 框架时候,不清楚用例的执行顺序到底是怎样的.对测试类里面的类和方法分不清楚,不知道什么时候执行,什么时候不执行.虽然或许通过代码实现了,也是稀里糊涂的一知 ...

  3. 如何使用FluentMigrator进行数据库迁移

    标题:如何使用FluentMigrator进行数据库迁移 地址:https://www.cnblogs.com/lwqlun/p/10649949.html 作者: Lamond Lu FluentM ...

  4. 【转】asp.net基础-HttpModule

    HttpModule是向实现类提供模块初始化和处置事件.当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理,也就是说此时对于H ...

  5. Linux - 修改系统的max open files、max user processes (附ulimit的使用方法)

    目录 1 问题说明 2 修改max open files 3 修改max user processes 4 附录: ulimit命令说明 1 问题说明 Linux 系统默认的max open file ...

  6. LVS的DR模型配置

    LVS的DR模型配置 介绍 下图为DR模型的通信过程,图中的IP不要被扑结构中的IP迷惑,图里只是为了说明DR的通信原理,应用到本例中的拓扑上其工作原理不变. 拓扑结构 服务器 IP地址 角色 Srv ...

  7. str.方法的整理(字符串类型内置方法的具体使用)

    <1>str.strip().str.lstrip()和str.rstrip() 1' str.strip()(主要方法) 方法:str.strip(self,chars) 作用:移除字符 ...

  8. jqgrid three 树形结构

    最近我们的表格中,需要更改数据的显示方式,就是jqgrid中以树形的方式显示.请先看图: 就是简单的这种从属方式.但是因为这个没有找到官方的文档(后来找到了,但是发现是翻译过来的,也不是很清楚),所以 ...

  9. ArcGIS API for JavaScript 4.x 本地部署之IIS法

    [导读] 关于如何在默认网站(Default Web Site,物理地址C:\inetpub\wwwroot\)启动,已有很多博客详尽地写好了. 本篇在自建网站(本机)中配置http而非https的j ...

  10. Android Service与Activity的交互

    Android中有时候需要在Service中改变Activity的UI,或者在Activity中修改Service中的数值.首先必须使用与Activity绑定的Service,有三种方式可以实现.第一 ...