您的位置:首页 > 其它

设计模式之桥接模式实例

2015-01-16 15:17 381 查看
桥接模式将抽象部分与实现部分分离,使他们都可以独立变化。如果一个系统有两个以上相互独立的抽象变化,就需要使用桥接模式了。为说明桥接模式的使用方法,下面使用一个例子。
假设设计一个日志系统,这个系统可以记录多种日志类型,如交易日志,数据库日志,用户操作日志等,同时,这个系统还支持多种日志的表现形式。如xml文件,文本文件,数据库库数据,E-mail等。

抽象:日志的种类。

实现:日志的表现方式。

实现代码如下:
Log源代码
public abstract class Log{
protected LogSave logSave;
public Log(LogSave logSave){
this.logSave=logSave;
}
public abstract void writeToLog();
}


LogSave源代码
public abstract class LogSave{
public abstract void write();
}
下面是三个Log的子类
TradLog源代码
public class TradLog extends Log{
public TradLog(LogSave logSave){
super(logSave);
}

@Override
public void writeToLog(){
System.out.println("写入TradLog数据");
this.logSave.write();
}
}


DbLog源代码
public class DbLog extends Log{
public DbLog(LogSave logSave){
super(logSave);
}

@Override
public void writeToLog(){
System.out.println("写入DbLog数据");
this.logSave.write();
}
}


UserLog源代码
public class UserLog extends Log{
public UserLog(LogSave logSave){
super(logSave);
}

@Override
public void writeToLog(){
System.out.println("写入UserLog数据");
this.logSave.write();
}
}
下面是LogSave的三个实现类

XmlImpl源代码
public class XmlImpl extends LogSave{
@Override
public void write(){
System.out.println("使用xml方式存储");
}
}


TextImpl源代码
public class TextImpl extends LogSave{
@Override
public void write(){
System.out.println("使用文本方式存储");
}
}


EmailImpl源代码
public class EmailImpl extends LogSave{
@Override
public void write(){
System.out.println("使用发邮件的方式存储");
}
}
实现不能和抽象发生耦合,而只能由抽象和实现发生耦合。
下面是启动类展示最终结果:
Client源代码
public class Client{
public static void main(String[] args){
Log log=new UserLog(new XmlImpl());
log.writeToLog();

Log log2=new DbLog(new EmailImpl());
log2.writeToLog();
}
}
运行结果如下:
写入UserLog数据

使用xml方式存储
写入DbLog数据
使用发邮件的方式存储

(end)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: