设计模式学习小结

设计模式小结-桥接模式

2017-10-12  本文已影响125人  r09er

桥接模式概述

在画图工具中,有各种不同类型的画笔,也有不同类型的颜色,可以用铅笔画黑色或红色,也可以用钢笔画黑色或红色,其实这个操作背后的设计模式就是桥接模式。如果不适用桥接模式,画4种不同颜色和类型的线,就需要4种比,如果颜色和画笔的种类更多,需要的画笔会指数级增长,这个时候,就需要有桥接模式了。

示例:

有一个数据转换工具,可以将数据库中的数据转换成多种文件格式,例如txt、xml、pdf等格式,同时该工具需要支持多种不同的数据库。试使用桥接模式对其进行设计。

UML图

示例解析

在该示例中,有两个独立变化的维度,分别是数据库类型和待转换的文件类型。ExactData是数据库读取数据后解析之后的数据,不同的数据库通过实现ExactDataImpl接口解析具体数据,抽象类AbstractFile持有ExactDataImpl对象,获取解析的数据,提供一个抽象的convetTo方法由子类实现。具体的文件类继承AbstractFile在convertTo进行数据的转换处理。

示例代码

数据库读取数据维度

public  class ExactData {
    //忽略内容
}
//数据解析接口
public interface ExactDataImpl {
    ExactData readFromDB( );
}

//具体数据库读取接口
public class MySQLImpl implements ExactDataImpl {
    @Override
    public ExactData readFromDB() {
        System.out.println("MySQL数据读取");
        return new ExactData();
    }
}
//具体数据库读取并解析数据
public class OracleImpl implements ExactDataImpl {

    @Override
    public ExactData readFromDB() {
        System.out.println("Oracle数据读取");
        return new ExactData();
    }
}
//具体数据库读取并解析数据
public class DB2Impl implements ExactDataImpl {

    @Override
    public ExactData readFromDB() {
        System.out.println("DB2数据读取");
        return new ExactData();
    }
}

文件生成维度

//文件生成抽象类
public abstract class AbstractFile {
    protected ExactDataImpl exactDataImpl;
    public void setExactDataImpl(ExactDataImpl exactDataImpl){
        this.exactDataImpl = exactDataImpl;
    }
    public abstract void convertTo(  );
}
//具体文件生成类
public class PDFFile extends AbstractFile {
    @Override
    public void convertTo() {
        ExactData exactData =  exactDataImpl.readFromDB();

        System.out.println("转换为PDF文件");
    }
}
//具体文件生成类
public class TXTFile extends AbstractFile {
    @Override
    public void convertTo() {
        ExactData exactData =   exactDataImpl.readFromDB();

        System.out.println("转为TXT文件");
    }
}
//具体文件生成类
public class XMLFile extends AbstractFile {
    @Override
    public void convertTo() {
        ExactData exactData = exactDataImpl.readFromDB();

        System.out.println("转换为XML文件");
    }
}

调用


AbstractFile abstractFile = new TXTFile();
            ExactDataImpl exactDataImpl = new MySQLImpl();
            abstractFile.setExactDataImpl(exactDataImpl);
            abstractFile.convertTo();

输出内容


MySQL数据读取
转为TXT文件

桥接模式优缺点

优点

缺点

桥接模式的适用场景

上一篇 下一篇

猜你喜欢

热点阅读