Java23种设计模式——桥接模式

版权声明:本文为博主原创文章,可以随意转载,但是必须在开头标明出处。 https://blog.csdn.net/qq_29951983/article/details/78489938

该系列文章为博主学习笔记,原文请参考参考文章
本文禁止转载,但是欢迎大家留言区留言交流[微笑]

桥接模式:主要是针对两个变化的维度而设计的一种模式。
举个列子,比如要将某种数据库转换为多个格式:txt,xml,pdf等等。
现在我们不止一种数据库,分别有Oracle、MySQL、SQL server这三种数据库,就要求对每一种数据库进行转换。
这里写图片描述

但是上面存在一些问题,上面存在了两个维度,一种是数据库类,一种是转换的类。
1.当我们增加一种数据库,例如DB2,我们就得额外增加三个实现转换的类。
2.当我们增加一种转换的类,例如doc格式,就需要在每一个数据库类都进行增加。
以上不管怎么样都会对系统增加大量的类,导致起后期扩展很复杂。

这样就引用到了桥接模式可以很好针对变化维度进行处理,UML图:

这里写图片描述

代码:

public interface Conver {
    public void doConver();
}
public abstract class Database {
    public Conver conver;

    public void setConver(Conver conver) {
        this.conver = conver;
    }
    public abstract void conversion();
}
public class MySQL extends Database {

    @Override
    public void conversion() {
        conver.doConver();
        System.out.println("MySQL数据库");
    }
}
public class Oracle extends Database{
    @Override
    public void conversion() {
        conver.doConver();
        System.out.println("Oracle数据库");
    }
}

public class SQLserver extends Database {
    @Override
    public void conversion() {
        conver.doConver();
        System.out.println("SQL server数据库");
    }
}

public class PdfConver implements Conver{
    @Override
    public void doConver() {
        System.out.println("转换为pdf格式,数据库为:");
    }
}
public class TxtConver implements Conver {
    @Override
    public void doConver() {
        System.out.println("转换为txt格式,数据库为:");
    }
}
public class XmlConver implements Conver {
    @Override
    public void doConver() {
        System.out.println("转换为xml格式,数据库为:");
    }
}
public class myClass {
    public static void main(String[] args) {
        Database database=new Oracle();
        Conver pdfconver=new PdfConver();
        database.setConver(pdfconver);
        database.conversion();
    }
}

output:

转换为pdf格式,数据库为:
Oracle数据库

桥接模式对两个变化的维度都写成了抽象类和接口,将抽象部分与实现部分分离,这样他们都可以独立的变化。

微信公众号:
这里写图片描述

QQ群:365473065

猜你喜欢

转载自blog.csdn.net/qq_29951983/article/details/78489938