设计模式——桥接模式
来源:互联网 发布:江苏运时数据待遇如何 编辑:程序博客网 时间:2024/05/16 13:49
一、什么是桥接模式?
《大话设计模式》中有一个场景:当我们要进行绘画时,有两种选择:蜡笔和水彩。蜡笔是将笔和颜料混合在一起成为了一个整体,那么如果我们需要大号、中号、小号各12种颜色的蜡笔,总共36支,这无疑是一笔很大的花费,那么如果使用水彩呢?水彩用的是毛笔,我们只需要大中小三支毛笔,以及12种需要的颜料就可以完成这项任务,这样总共只需要15种物品,大大减少了需要的物品数目。这就是典型的桥接模式的应用,桥接模式就是把事物和其具体的实现进行分离,使他们可以各自独立的变化。桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化。如上面的例子,关键在于两件事物是否能分离,蜡笔无法将笔和颜色分离,而毛笔是可以的,所以毛笔和颜料完成了解耦,两者可以独立地变化。
桥接模式降低了系统间的耦合度,并且大大减少了代码量。
JDBC的数据库驱动就是一个桥,JDBC进行连接数据库的时候,不管底层使用了怎么样的数据库,只要配合了相应的JDBC代码,就可以使用。
二、桥接模式框图
三、使用桥接模式完成上述的绘画过程
3.1 Color类,颜色,内部只有一个color的字符串成员
package designpatterns.bridge;/** * Created by Olive on 2017/12/3. */public class Color { public String color;}
3.2 Brush类,毛笔的抽象类,内部持有了Color类的一个实例,有一个抽象的paint方法以及一个设置颜色的setColor方法
package designpatterns.bridge;/** * Created by Olive on 2017/12/3. */public abstract class Brush { Color c; public abstract void paint(); public void setColor(Color c) { this.c = c; }}
3.3 “三原色”类,继承至Color类,构造方法中指定了Color类的字符串成员color的具体属性
package designpatterns.bridge;/** * Created by Olive on 2017/12/3. */public class Red extends Color { public Red() { this.color = "red"; }}public class Yellow extends Color{ public Yellow() { this.color = "yellow"; }}public class Blue extends Color{ public Blue() { this.color = "blue"; }}
3.4 BigBrush类,大号毛笔
package designpatterns.bridge;/** * Created by Olive on 2017/12/3. */public class BigBrush extends Brush{ public void paint() { System.out.println("Using big brush to paint " + c.color); }}
3.5 SmallBrush类,小号毛笔
package designpatterns.bridge;/** * Created by Olive on 2017/12/3. */public class SmallBrush extends Brush{ public void paint() { System.out.println("Using small brush to paint " + c.color); }}
3.6 Painting类,用不同大小的毛笔以及不同的颜料进行绘画
package designpatterns.bridge;/** * Created by Olive on 2017/12/3. */public class Painting { public static void main(String[] args){ Brush brush = new BigBrush(); brush.setColor(new Red()); brush.paint(); brush.setColor(new Yellow()); brush.paint(); brush.setColor(new Blue()); brush.paint(); System.out.println(); System.out.println("**********************************"); System.out.println(); brush = new SmallBrush(); brush.setColor(new Red()); brush.paint(); brush.setColor(new Yellow()); brush.paint(); brush.setColor(new Blue()); brush.paint(); }}
3.7 运行结果
Using big brush to paint redUsing big brush to paint yellowUsing big brush to paint blue**********************************Using small brush to paint redUsing small brush to paint yellowUsing small brush to paint blueProcess finished with exit code 0
四、一点小总结
桥接模式与适配器模式都是让两种事物一起工作,两者之间有时候容易弄混,那么具体怎么区分呢?还是那句话:设计的思想不同。适配器模式改变接口,使两个接口间进行兼容,比如说电源适配器让只能使用5V电源的手机可以使用220V进行充电。桥接模式是将抽象化与实现进行分离,可以让两者有各自的变化。反应到具体实现中,如果已经存在两个接口,想让两者兼容运行,那么可以使用适配器模式;但是如果现在还没有接口,只是想让两者分开实现,就可以使用桥接模式。适配器是在有两边的接口的前提下,才设计使用的;而桥接模式是先设计桥,再有桥两边的模块。
- 设计模式——桥接模式
- 设计模式——桥接模式
- 设计模式——桥接模式
- 设计模式——桥接模式
- 设计模式——桥接模式
- 设计模式——桥接模式
- 设计模式——桥接模式
- 设计模式——桥接模式
- 设计模式——桥接模式
- 设计模式——桥接模式
- 设计模式——桥接模式
- 【设计模式】——桥接模式
- 设计模式——桥接模式
- 设计模式——桥接模式
- 设计模式——桥接模式
- 设计模式——桥接模式
- 设计模式——桥接模式
- 设计模式——桥接模式
- “未卜先知”、“自学成才”:GANs奇思妙想TOP10
- 工作总结第五天
- Linux查看物理CPU个数、核数、逻辑CPU个数
- mysql--10010概述
- GDT(全局描述符表)和LDT(局部描述符表)
- 设计模式——桥接模式
- SQL Server基础之存储过程
- Mysql 中的group_concat函数的使用及陷阱
- CMD 静态路由设置
- Python学习笔记--基础篇5
- LinkedHashMap和HashMap的比较使用
- ios json文件加载动态图,让app真正动起来
- 算法题
- 整理部分java虚拟机性能监测的命令