该系列文章为博主学习笔记,原文请参考参考文章
本文禁止转载,但是欢迎大家留言区留言交流[微笑]
桥接模式:主要是针对两个变化的维度而设计的一种模式。
举个列子,比如要将某种数据库转换为多个格式: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