桥接模式
蜡笔中颜色和型号之间存在耦合
毛笔中,颜色和型号解耦了
如果软件系统中某个类存在两个独立变化的维度,桥接模式可以将两个维度分离出来
角色
抽象类
扩充抽象类
实现类接口
提供基本操作
抽象类定义的接口会做更多更负责的操作
使用关联关系,替代继承关系
具体实现类
面向对象思想
单一职责原则
开闭原则
合成复用原则
里氏替换原则
依赖倒转原则
毛笔案例
毛笔型号维度
大毛笔
中毛笔
小毛笔
型号是毛笔的抽象部分,颜色是毛笔的实现部分
毛笔颜色维度
黑色
红色
灰色
蓝色
...
毛笔和颜色之间是聚合关系
图片案例
Image充当抽象类
子类JPGImage,PNGImage、BMPImage和GIFImage充当扩充抽象类
ImageImp充当实现类接口
子类WindowsImp、LinuxImp、UnixImp充当具体实现类
像素辅助类,Matrix,不同操作系统提供不同的方式显示像素矩阵
桥接模式可以和适配器模式结合使用

1.图片实现类接口

package Bridge;

/**
* Created by e550 on 2016/10/3.
*/
public interface ImageImp {
public void doPaint(Matrix m);
}

2.图片抽象类

package Bridge;

/**
* Created by e550 on 2016/10/3.
*/
abstract class Image {
protected ImageImp imp;
public void setImageImp(ImageImp imp) {
this.imp = imp;
} public abstract void parseFile(String fileName);
}

3.图片扩充抽象类

JPG

package Bridge;

/**
* Created by e550 on 2016/10/3.
*/
public class JPGImage extends Image{
public void parseFile(String fileName) {
Matrix m = new Matrix();
imp.doPaint(m);
System.out.println(fileName + ",格式为JPG");
}
}

PNG

package Bridge;

/**
* Created by e550 on 2016/10/3.
*/
public class PNGImage extends Image{
public void parseFile(String fileName) {
Matrix m = new Matrix();
imp.doPaint(m);
System.out.println(fileName + ",格式为PNG。");
}
}

GIF

package Bridge;

/**
* Created by e550 on 2016/10/3.
*/
public class GIFImage extends Image{
public void parseFile(String fileName) {
Matrix m = new Matrix();
imp.doPaint(m);
System.out.println(fileName + ",格式为GIF。");
}
}

BMP

package Bridge;

/**
* Created by e550 on 2016/10/3.
*/
public class BMPImage extends Image{
public void parseFile(String fileName) {
Matrix m = new Matrix();
imp.doPaint(m);
System.out.println(fileName + ",格式为BMP。");
}
}

4.具体实现类

Windows

package Bridge;

/**
* Created by e550 on 2016/10/3.
*/
public class WindowsImp implements ImageImp{
public void doPaint(Matrix m) {
//调用Windows系统的绘制函数绘制像素矩阵
System.out.println("在Windows操作系统中显示图像:");
}
}

Linux

package Bridge;

/**
* Created by e550 on 2016/10/3.
*/
public class LinuxImp implements ImageImp{
public void doPaint(Matrix m) {
//调用Windows系统的绘制函数绘制像素矩阵
System.out.println("在Linux操作系统中显示图像:");
} }

Unix

package Bridge;

/**
* Created by e550 on 2016/10/3.
*/
public class UnixImp implements ImageImp{
public void doPaint(Matrix m) {
System.out.println("在Unix操作系统中显示图像:");
}
}

5.客户端

package Bridge;

/**
* Created by e550 on 2016/10/3.
*/
public class Client {
public static void main(String args[]) {
Image image;
ImageImp imp;
image = new GIFImage();
imp = new LinuxImp();
image.setImageImp(imp);
image.parseFile(" 日出美景");
}
}

执行结果

在Linux操作系统中显示图像:

日出美景,格式为GIF。

再看一个笔的例子

1.Color接口

package Bridge.PenColor;

/**
* Created by e550 on 2016/10/3.
*/
public interface Color {
void bepaint(String penType,String name);
}

2.Pen抽象类

package Bridge.PenColor;

/**
* Created by e550 on 2016/10/3.
*/
public abstract class Pen {
protected Color color;
public void setColor(Color color) {
this.color = color;
}
public abstract void draw(String name);
}

3.Color接口实现

package Bridge.PenColor;

/**
* Created by e550 on 2016/10/3.
*/
public class Black implements Color{
public void bepaint(String penType,String name) {
System.out.println(penType + "黑色的" + name + ".");
}
}
package Bridge.PenColor;

/**
* Created by e550 on 2016/10/3.
*/
public class Blue implements Color{
public void bepaint(String penType,String name) {
System.out.println(penType + "蓝色的" + name + ".");
}
}

4.Pen抽象类实现

package Bridge.PenColor;

/**
* Created by e550 on 2016/10/3.
*/
public class BigPen extends Pen{
public void draw(String name) {
String penType="大号毛笔绘制";
this.color.bepaint(penType,name);
}
}
package Bridge.PenColor;

/**
* Created by e550 on 2016/10/3.
*/
public class MiddlePen extends Pen{
public void draw(String name) {
String penType = "中型笔绘制";
this.color.bepaint(penType,name);
}
}
package Bridge.PenColor;

/**
* Created by e550 on 2016/10/3.
*/
public class SmallPen extends Pen{
public void draw(String name) {
String penType = "小型笔绘制";
this.color.bepaint(penType,name);
}
}

5.客户端

package Bridge.PenColor;

/**
* Created by e550 on 2016/10/3.
*/
public class Client {
public static void main(String args[]) {
Color color;
Pen pen;
color = new Blue();
pen = new BigPen();
pen.setColor(color);
pen.draw("鲜花");
}
}

执行结果

大号毛笔绘制蓝色的鲜花

JAVA设计模式之【桥接模式】的更多相关文章

  1. java设计模式7——桥接模式

    java设计模式7--桥接模式 1.桥接模式介绍 桥接模式是将抽象部分与它的实现部分分离,使他们都可以独立的变化.它是一种对象结构型模式,又称为柄体模式或接口模式. 2.解决问题 2.1.将复杂的组合 ...

  2. java设计模式之桥接模式

    桥接模式 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化.这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦.这种模式涉及到一个作为桥接的 ...

  3. Java设计模式:桥接模式

    问题提出 生活中有很多事物集合,设为A1,A2......Am ,而每个事物都有功能F1,F2....Fn. 例如邮局的发送业务.简单模拟有两类事物:信件和包裹,均有平邮和挂号邮寄功能.程序设计中如何 ...

  4. Java设计模式应用——桥接模式

    性能管理系统中,数据产生后需要经过采集,汇聚,入库三个流程,用户才能查询使用. 采集可以是snmp采集,也可以是ems采集:汇聚可以使storm汇聚,也可以是spark汇聚:入库可以是hdfs入库,也 ...

  5. java设计模式之-----桥接模式

    一.概念定义 将抽象部分和实现部分分离,使他们都可以独立的变化.(这句话有点抽象啊..) 在软件系统中,某种类型由于自身逻辑,具有多个维度的变化,如何利用面向对象的技术来使得该类型沿着多方向变化,而又 ...

  6. JAVA设计模式之桥接模式(bridge)

    桥接模式: 分离抽象与具体实现,让他们可以独自发展,防止类爆炸 场景: 过年走亲戚是我们中国人传统的习俗,走亲戚那就少不了要买东西(苹果,牛奶等等),这些具体的东西就是具体的类 蒙牛牛奶,有机苹果,有 ...

  7. 八戒转世投胎竟然是Java设计模式:桥接模式

    目录 示例 代码实例 桥接模式 定义 意图 主要解决问题 何时使用 优缺点 八戒转世投胎的故事 示例 请开发一个画图程序,可以画各种颜色不同形状的图形,请用面向对象的思 想设计图形 分析: 1.比如有 ...

  8. java面试题之----jdbc中使用的设计模式(桥接模式)

    1.JDBC(JavaDatabase Connectivity) JDBC是以统一方式访问数据库的API. 它提供了独立于平台的数据库访问,也就是说,有了JDBC API,我们就不必为访问Oracl ...

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

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

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

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

随机推荐

  1. 造个简单的轮子倒是不难,但可用性健壮性高到qt这样全世界都在用,就几乎不可能了

    造个简单的轮子倒是不难,但可用性健壮性高到qt这样全世界都在用,就几乎不可能了比如自己写个事件循环实现信号槽,还真不难,我这边的架构里就这么搞了个仿osgi的事件总线嵌入式实时操作系统上能用的大型gu ...

  2. 0x04 二分

    二分.三分其实没什么.. 但是真心觉得市面上的朴素二分打法千奇百怪,假如是像我的标程应该是比较稳妥的,然而poj2018那题(前缀和又想起来了)是向下取整,精度有点问题(经常拍出一些什么xxx.999 ...

  3. 杂项:ExtJS

    ylbtech-杂项:ExtJS extjs是一种软件.自动生成行号,支持checkbox全选,动态选择显示哪些列,支持本地以及远程分页,可以对单元格按照自己的想法进行渲染,这些也算可以想到的功能. ...

  4. 2.Matlab数值数组及其运算

    2.1引导 2.2一维数组的创建与寻访 2.3二维数组的创建 2.4二维数组元素的标识 2.5二维数组的子数组寻访和赋值 2.6执行数组运算的常用函数 2.7数组运算和矩阵运算 2.8多项式的表达和创 ...

  5. 7. Reverse Integer[E]整数反转

    题目 Given a 32-bit signed integer, reverse digits of an integer. Example1: x = 123, return 321 Exampl ...

  6. $(function(){});里的方法无效问题

    $(function(){})已经是一个匿名函数了,在里面定义的函数已经是私有了,不能全局访问.把函数定义在全局,也就是function外面,这样外部才能调用.

  7. B/S发布到服务器

    域名准备好了?准备好就开始跟我操作吧: 1:预先在项目的同目录下新建文件夹 Public 2:找到项目解决方案重新生成 3:项目右击 发布 到 Public 4: 登入服务器 打开 Internet管 ...

  8. 截图 gif 图小工具

    GifCam gyazo gyazo.com Windows 10 中的内置截屏(Win+G)

  9. 微信小程序调试 Webview

    document.querySelectorAll("webview")[1].showDevTools(true);

  10. DataTables入门

    转载 https://blog.csdn.net/gfd54gd5f46/article/details/65938189