注:桥梁模式是结构型设计模式,将抽象部分与它的实现部分相分离,使他们可以独立的变化。 

抽象部分可能有n种实现,而实现部分可能有n种实现方式,采用享元模式,减少子类数据。

曾经看过一个桥梁模式相关的例子,觉得挺好的。一个客户端需要调用一个作画程序。对画笔要求为,三种笔芯大小:小、中、大;三种颜色:红、黑、黄。

下面用java代码实现如下

1,颜色接口

package com.pattern.structure.bridge;

public interface Color {

public void use() ;

}

2,三种颜色实现

package com.pattern.structure.bridge;

public class Red implements Color {

@Override

public void use() {

System.out.println("use red...");

}

}
package com.pattern.structure.bridge;

public class Black implements Color {

@Override

public void use() {

System.out.println("use black...");

}

}
package com.pattern.structure.bridge;

public class Yellow implements Color {

@Override

public void use() {

System.out.println("use yellow...");

}

}

3,三种大小笔触画法

package com.pattern.structure.bridge;

public abstract class Pen {

protected Color color ;

public Pen(Color color) {

this.color = color ;

}

public abstract void draw() ;

}
package com.pattern.structure.bridge;

public class SmallPen extends Pen {

public SmallPen(Color color) {

super(color);

}

@Override

public void draw() {

color.use(); 

System.out.println("use small pen...");

}

}
package com.pattern.structure.bridge;

public class MiddlePen extends Pen {

public MiddlePen(Color color) {

super(color);

}

@Override

public void draw() {

color.use(); 

System.out.println("use middle pen...");

}

}
package com.pattern.structure.bridge;

public class BigPen extends Pen {

public BigPen(Color color) {

super(color);

}

@Override

public void draw() {

color.use(); 

System.out.println("use big pen...");

}

}

4,客户端调用

package com.pattern.structure.bridge;

public class Client {

public static void main(String[] args) {

Color color = new Red() ;

Pen pen = new BigPen(color) ;

pen.draw();

}

}

从上代码可以看出,如果不实用桥梁模式,要满足需求,得有3x3个子类,现在是颜色使用 3个子类,笔触大小画法 3 个子类。如果颜色种类多样,笔触大小多样,使用桥梁模式和不实用桥梁模式的子类数量相差更大。

桥梁模式通用类图

------

  文章只为技术交流学习,若所写有误,请斧正,评论或消息与我,为不误导后来学习的人;若有不小心所写侵权,请告知我;若转载,请注明出处。

Bridge 桥梁模式的更多相关文章

  1. 设计模式C++学习笔记之十一(Bridge桥梁模式)

      桥梁模式,将抽象部分与它的实现部分分离,使它们都可以独立地变化.实现分离的办法就是增加一个类, 11.1.解释 main(),客户 IProduct,产品接口 CHouse,房子 CIPod,ip ...

  2. 9、Bridge 桥梁模式 将类的功能层次结构与实现层结构分离 结构型设计模式

    1.何为桥接模式 桥接模式是一种将类的功能层次和实现层次分离的技术,所谓类的功能层次指的是类要实现什么功能,要定义多少个函数还进行处理,在功能之中我们会用到继承来定义新的方法同时也能使用父类的方法,这 ...

  3. Bridge 桥梁模式 桥接模式

    简介 将[抽象部分](Abstraction,人)与[实现部分](Implementor,人穿的衣服)分离,使它们都可以独立的变化. [业务抽象角色]引用[业务实现角色],或者说[业务抽象角色]的部分 ...

  4. java设计模式之桥梁模式(Bridge)

    1.桥梁模式 与 策略模式 非常相似 (其实很多设计模式都相似,因为所有的模式都是按照设计原则 而设计出来的,设计原则就相当于武功的心法,设计模式就是招式,只要心法过硬,就可以无招胜有招了.) 这里也 ...

  5. 说说设计模式~桥梁模式(Bridge)

    返回目录 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度? ...

  6. 24种设计模式--桥梁模式【Bridge Pattern】

    今天我要说说我自己,梦想中的我自己,我身价过亿,有两个大公司,一个是房地产公司,一个是服装制造业,这两个公司都很赚钱,天天帮我在累加财富,其实是什么公司我倒是不关心,我关心的是是不是在赚钱,赚了多少, ...

  7. 桥接模式 桥梁模式 bridge 结构型 设计模式(十二)

      桥接模式Bridge   Bridge 意为桥梁,桥接模式的作用就像桥梁一样,用于把两件事物连接起来   意图 将抽象部分与他的实现部分进行分离,使得他们都可以独立的发展.  意图解析 依赖倒置原 ...

  8. 代理(Proxy)模式 ,桥梁(Bridge)模式

    一:代理模式 1 根据名字我们就可以理解为:代替别人管理 2 什么情况下使用代理模式呢? 在软件系统中,有些对象有时候由于跨越网络或者其他的障碍,而不能够或者不想直接访问另一个对象,如果直接访问会给系 ...

  9. Java设计模式(13)——结构型模式之桥梁模式(Bridge)

    一.概述 概念 将抽象与实现脱耦,使得抽象和实现可以独立运行 UML图 角色: 角色关系 二.实践 按照上面的角色建立相应的类 抽象化角色 /** * 抽象化角色 * * @author Admini ...

随机推荐

  1. centos超详细搭建jumpserver跳板机

    一.官网 https://docs.jumpserver.org/zh/master/  二.一站式.分布式安装文档  三.选择最新版 四.在线安装文档 五.按文档部署(4G.二核.50G硬盘)  六 ...

  2. windows 3种方式运行exe文件

    1.双击文件运行 2.打开cmd,cd 到要运行的文件目录下,输入文件名或者文件名.exe 3.将文件目录配置到系统环境变量,按windws+R输入文件名或者文件名.exe

  3. 配置nginx直接使用webpack生成的gz压缩文件,而不用nginx自己压缩

    参考链接:https://blog.csdn.net/ywl570717586/article/details/100011721

  4. 关于MYSQL安装踩的坑

    前提:本人装的版本是mysql-8.0.18-winx64,win10系统,如果你安装的是其他版本的MYSQL,语法会跟下面有些许区别: 一,安装 https://dev.mysql.com/down ...

  5. 在docker容器下安装airflow

    本人的环境是基于centos7下来安装的 一.安装docker  下载docker安装包,下载地址:https://download.docker.com/linux/static/stable/x8 ...

  6. Prefix and Suffix Search

    Given many words, words[i] has weight i. Design a class WordFilter that supports one function, WordF ...

  7. python 基础(十八)--shutil模块

    shutil模块 shutil.copyfileobj(src,dst):只拷贝文件内容,需要open文件:目标文件不存在时创建,存在时覆盖 shutil.copyfileobj(open('old. ...

  8. T100弹出是否确认窗体方式

    例如: IF NOT cl_ask_confirm('aim-00108') THEN CALL s_transaction_end(') CALL cl_err_collect_show() RET ...

  9. 区间dp 整数划分问题

    整数划分(四) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近 ...

  10. 修改源码去除zblog博客分类目录的RSS图标

    zblog博客的所建立的分类默认前面是有一个RSS图标的,如下图所示: 其实这个图标的存在并不能起到太大的美化作用,增加用户订阅数量的作用.那么应该如何去掉这个RSS图标呢? 这个RSS图标的生成在z ...