JAVA设计模式之【桥接模式】

简介:
桥接模式    蜡笔中颜色和型号之间存在耦合    毛笔中,颜色和型号解耦了    如果软件系统中某个类存在两个独立变化的维度,桥接模式可以将两个维度分离出来    角色        抽象类        扩充抽象类        实现类接口            提供基本操作            抽象类定义的接口会做更多更负责的操作            使用关联关系,替代继承关系        具体实现类    面向对象思想        单一职责原则        开闭原则        合成复用原则        里氏替换原则        依赖倒转原则    毛笔案例        毛笔型号维度            大毛笔            中毛笔            小毛笔        型号是毛笔的抽象部分,颜色是毛笔的实现部分        毛笔颜色维度            黑色            红色            灰色            蓝色            ...        毛笔和颜色之间是聚合关系    图片案例        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("鲜花");
    }
}

执行结果
大号毛笔绘制蓝色的鲜花


本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/5929512.html如需转载请自行联系原作者

相关文章
|
19天前
|
设计模式 Java
Java中的设计模式及其应用场景解析
Java中的设计模式及其应用场景解析
|
16天前
|
设计模式 测试技术 Python
《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
【7月更文挑战第10天】Page Object Model (POM)是Selenium自动化测试中的设计模式,用于提高代码的可读性和维护性。POM将每个页面表示为一个类,封装元素定位和交互操作,使得测试脚本与页面元素分离。当页面元素改变时,只需更新对应页面类,减少了脚本的重复工作和维护复杂度,有利于团队协作。POM通过创建页面对象,管理页面元素集合,将业务逻辑与元素定位解耦合,增强了代码的复用性。示例展示了不使用POM时,脚本直接混杂了元素定位和业务逻辑,而POM则能解决这一问题。
32 6
|
13天前
|
设计模式 Java 测试技术
《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
【7月更文挑战第12天】在本文中,作者宏哥介绍了如何在不使用PageFactory的情况下,用Java和Selenium实现Page Object Model (POM)。文章通过一个百度首页登录的实战例子来说明。首先,创建了一个名为`BaiduHomePage1`的页面对象类,其中包含了页面元素的定位和相关操作方法。接着,创建了测试类`TestWithPOM1`,在测试类中初始化WebDriver,设置驱动路径,最大化窗口,并调用页面对象类的方法进行登录操作。这样,测试脚本保持简洁,遵循了POM模式的高可读性和可维护性原则。
17 2
|
16天前
|
设计模式 安全 Java
Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
33 1
|
18天前
|
设计模式 Java 数据库连接
Java中的设计模式在实际项目中的应用
Java中的设计模式在实际项目中的应用
|
26天前
|
设计模式 Java
设计模式在Java项目中的实际应用
设计模式在Java项目中的实际应用
|
24天前
|
设计模式 消息中间件 负载均衡
实现可扩展和可靠的分布式系统的Java设计模式
实现可扩展和可靠的分布式系统的Java设计模式
|
25天前
|
设计模式 JavaScript
js设计模式【详解】—— 桥接模式
js设计模式【详解】—— 桥接模式
33 6
|
26天前
|
设计模式 缓存 算法
编写高效的Java工具类:实用技巧与设计模式
编写高效的Java工具类:实用技巧与设计模式
|
23天前
|
设计模式 Java 数据安全/隐私保护
Java中的设计模式:从入门到精通
Java中的设计模式:从入门到精通