参考《设计模式的艺术软件开发人员内功修炼之道》-刘伟 著
实验目的
桥接模式通过对象之间关联的方式,在主对象中可以访问多种关联对象
实验代码
package BridgeMode;
interface DataSource{
public String readData();
}
class DBSource implements DataSource{
@Override
public String readData() {
// TODO Auto-generated method stub
System.out.println("DBSource");
return "DBSource";
}
}
class FileSource implements DataSource{
@Override
public String readData() {
// TODO Auto-generated method stub
System.out.println("FileSource");
return "FileSource";
}
}
class SocketSource implements DataSource{
@Override
public String readData() {
// TODO Auto-generated method stub
System.out.println("SocketSource");
return "SocketSource";
}
}
abstract class FileDealer{
protected DataSource dataSource;
public void setDataSource(DataSource _dataSource){
dataSource = _dataSource;
}
abstract public void StoreToFile();
}
class WordFileDealer extends FileDealer{
@Override
public void StoreToFile() {
// TODO Auto-generated method stub
String data = dataSource.readData();
System.out.println("WordFileDealer");
}
}
class ExcelFileDealer extends FileDealer{
@Override
public void StoreToFile() {
// TODO Auto-generated method stub
String data = dataSource.readData();
System.out.println("ExcelFileDealer");
}
}
class PowerPointerFileDealer extends FileDealer{
@Override
public void StoreToFile() {
// TODO Auto-generated method stub
String data = dataSource.readData();
System.out.println("PowerPointerFileDealer");
}
}
public class BridgeModeTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
DataSource dataSource = new DBSource();
FileDealer fileDealer = new WordFileDealer();
fileDealer.setDataSource(dataSource);
fileDealer.StoreToFile();
}
}
结果输出
DBSource
WordFileDealer
结论
- 避免多层继承带来的类之间静态绑定,数量过多的弊端
- 符合开闭原则,利于扩展