桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。

假如我们需要建立一个日志记录器,可以实现数据库记录和文本记录。根据我们的经验我们应该将日志记录抽象化,在分别用数据库记录和文本记录来实现具体的功能。

后来我们需要将他分别应用到net平台和java平台,考虑到不同平台的记录不同我们分别将数据库记录细化为net平台上的数据库机记录和java平台上的数据库记录。以及不同的文本记录。

在后来我们打算添加xml平台以及更多的平台进去。

现在发现我们的设计变得庞大脆弱,即便平台不同但总有相似之处,这其中的冗余代码会有很多。

假如我们不止沿着平台这一方向扩展呢。

因此我们需要使用桥接模式进行更加合理的设计。

桥接模式将抽象部分与他的实现部分分离,使他们都可以独立的变化。

抽象化:多个实体中共同的概念性联系。如:日志记录

实现化:抽象化的具体实现。如:在Net平台上进行数据库日志记录。

我们可以进行如下设计:

桥接类:

抽象日志

 public  abstract class log {
private ImpLog impLog; public log(ImpLog impLog) {
super();
this.impLog = impLog;
} abstract public void write(String log); public ImpLog getImpLog() {
return impLog;
} public void setImpLog(ImpLog impLog) {
this.impLog = impLog;
}
}

实现化角色:

抽象平台

 public abstract class ImpLog {

 abstract public void execute(String msg);

 }

具体实现化角色:

java平台

 public class JImpLog extends ImpLog{

     @Override
public void execute(String msg) {
System.out.println("在java平台上," + msg);
} }

net平台

 public class NImpLog extends ImpLog{

     @Override
public void execute(String msg) {
System.out.println("在Net平台上,"+msg); } }

桥接具体类:

数据库日志:

public class DataBaseLog extends log{

    public DataBaseLog(ImpLog impLog) {
super(impLog);
} @Override
public void write(String log) {
getImpLog().execute("数据库日志:" + log);
} }

文本文件日志

 public class TextFileLog extends log{

     public TextFileLog(ImpLog impLog) {
super(impLog);
} @Override
public void write(String log) {
getImpLog().execute(log);
} }

客户测试类:

 public class BridgePattern {

     public static void main(String[] args) {
ImpLog j= new JImpLog();//建立java平台
log jl = new DataBaseLog(j);//建立基于java 的数据库日志写入
jl.write(" I am fine!"); //写入日志文件 } }

最新文章

  1. 24章 创建TPL自定义模板(1)
  2. 弹性盒子之wap端布局
  3. Saying that Java is nice because it works on every OS is like saying that anal sex is nice because it works on every gender.
  4. Unable to execute dex: Multiple dex files define Lcom/kenai/jbosh/AbstractAttr
  5. MYSQL 删除字段值为NULL的语法
  6. 3天CSS总结
  7. React快速入门教程
  8. POJ1273 网络流-->最大流-->模板级别-->最大流常用算法总结
  9. WEB相关系列
  10. SpringMVC框架学习笔记(3)——controller配置汇总
  11. debian 9 双显卡安装NVIDIA显卡驱动
  12. 我在 B 站学机器学习(Machine Learning)- 吴恩达(Andrew Ng)【中英双语】
  13. __x__(6)0905第二天__标签属性=“值”
  14. java 大数据运算 BigInteger BigDecimal
  15. elasticsearch的索引操作和文档操作总结
  16. luogu2678 [NOIp2015]跳石头 (二分答案+贪心)
  17. linux常用命令大全2--挂载/dpkg/文件系统分析/apt/光盘/关机
  18. [LeetCode系列] 双单链表共同节点搜索问题
  19. Linux基础入门 第一章:Linux环境搭建——Redhat 6.4图文安装教程
  20. HDU - 2732 Leapin' Lizards (拆点最大流)

热门文章

  1. c++中变量、变量名、变量地址、指针、引用等含义
  2. day 64 Django基础十之Form和ModelForm组件
  3. day 53 Django基础二之URL路由系统
  4. 关于type return to continue,or q <return> to quit
  5. JS数组 组团(如何创建数组)var mychar = new Array( )
  6. CodeForces 258D Little Elephant and Broken Sorting(期望)
  7. Codeforces 388D Fox and Perfect Sets
  8. CSS所有选择器
  9. csps模拟67神炎皇,降雷皇,幻魔皇题解
  10. 常见的HTTP状态码详细解析