设计模式 之 创建型模式 <三> 桥接模式(Bridge Pattern )

在桥接模式几个角色:
●Abstraction(抽象类):用于定义抽象类的接口,它一般是抽象类而不是接口,其中定义了 一个Implementor(实现类接口)类型的对象并可以维护该对象,
它与Implementor之间具有关联关系,它既可以包含抽象业务方法,也可以包含具体业务方法。


●RefinedAbstraction(扩充抽象类):扩充由Abstraction定义的接口,通常情况下它不再是抽象类而是具体类,它实现了在Abstraction中声明的抽象业务方法,
在RefinedAbstraction中可以 调用在Implementor中定义的业务方法。


●Implementor(实现类接口):定义实现类的接口,这个接口不一定要与Abstraction的接口完 全一致,事实上这两个接口可以完全不同,一般而言,Implementor接口仅提供基本操作,
而 Abstraction定义的接口可能会做更多更复杂的操作。Implementor接口对这些基本操作进行了声 明,而具体实现交给其子类。
通过关联关系,在Abstraction中不仅拥有自己的方法,还可以调 用到Implementor中定义的方法,使用关联关系来替代继承关系。


●ConcreteImplementor(具体实现类):具体实现Implementor接口,在不同的 ConcreteImplementor中提供基本操作的不同实现,在程序运行时,
ConcreteImplementor对象将 替换其父类对象,提供给抽象类具体的业务操作方法。


练习:
Sunny软件公司欲开发一个数据转换工具,可以将数据库中的数据转换成多种文件格式, 例如txt、xml、pdf等格式,同时该工具需要支持多种不同的数据库。
试使用桥接模式对 其进行设计。
1.数据库抽象类
//数据库抽象类
public abstract class AbsDatabase {
    protected FileFormat fileFormat=null;
    public AbsDatabase(FileFormat fileFormat){
        this.fileFormat=fileFormat;
    }
    abstract void convertFile();
}
View Code

    MySql 具体实现类

//MySql 具体实现类
public class MySqlDatabase extends AbsDatabase {

    public MySqlDatabase(FileFormat fileFormat) {
        super(fileFormat);
    }

    @Override
    public void convertFile() {
        String data=getData();
        fileFormat.saveFile(data);
    }

    private String getData() {
        return "返回MySql数据库里面的数据!";
    }
}
View Code

   Oracle 具体实现类

 
 
//Oracle 具体实现类
public class OracleDatabase extends AbsDatabase {
    public OracleDatabase(FileFormat format) {
        super(format);
    }
    @Override
    public void convertFile() {
        String data=getData();
        fileFormat.saveFile(data);
    }

    private String getData() {
        return "返回Oracle数据库里面的数据!";
    }

}
View Code
 
 

   2.文件格式接口

   

//文件格式接口
public interface FileFormat {
    public void saveFile(String data);
}
View Code

 txt 文件格式

public class TxtFormat implements FileFormat {
    String TAG="TxtFormat";
    @Override
    public void saveFile(String data) {
        Log.d(TAG,"保持到为txt格式文件!");
    }
}
View Code

xml 文件格式

public class XmlFormat implements FileFormat {
    String TAG="XmlFormat";
    @Override
    public void saveFile(String data) {
        Log.d(TAG,"保持到为xml格式文件!");
    }
}
View Code

pdf文件格式

public class PdfFormat implements FileFormat {
    String TAG="PdfFormat";
    @Override
    public void saveFile(String data) {
        Log.d(TAG,"保持到为pdf格式文件!");
    }
}
View Code

 

3. 测试

    public void  test(){
        FileFormat txtFormat=new TxtFormat();
        //---------将MySql数据库的数据转换为txt文件---------------
        AbsDatabase mySqlDatabase=new MySqlDatabase(txtFormat);
        mySqlDatabase.convertFile();
        //---------将Oracle数据库的数据转换为txt文件---------------
        AbsDatabase oracleDatabase=new OracleDatabase(txtFormat);
        oracleDatabase.convertFile();
        //==========================================================================
        FileFormat xmlFormat=new XmlFormat();
        //---------将MySql数据库的数据转换为xml文件---------------
        mySqlDatabase=new MySqlDatabase(xmlFormat);
        mySqlDatabase.convertFile();
        //---------将Oracle数据库的数据转换为xml文件---------------
        oracleDatabase=new OracleDatabase(xmlFormat);
        oracleDatabase.convertFile();
        //==========================================================================
    }
View Code

 

 

 

 





 

你可能感兴趣的:(设计模式 之 创建型模式 <三> 桥接模式(Bridge Pattern ))