桥接模式(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!"); //写入日志文件 } }

桥接模式(Bridge、Implementor)(具体不同平台日志记录,抽象与实现分离)的更多相关文章

  1. 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)

    原文:乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) 作者:webabcd 介绍 ...

  2. python 设计模式之桥接模式 Bridge Pattern

    #写在前面 前面写了那么设计模式了,有没有觉得有些模式之间很类似,甚至感觉作用重叠了,模式并不是完全隔离和独立的,有的模式内部其实用到了其他模式的技术,但是又有自己的创新点,如果一味地认为每个模式都是 ...

  3. 【设计模式】桥接模式 Bridge Pattern

    开篇还是引用吕振宇老师的那篇经典的文章<设计模式随笔-蜡笔与毛笔的故事>.这个真是太经典了,没有比这个例子能更好的阐明桥接模式了,这里我就直接盗来用了. 现在市面上卖的蜡笔很多,各种型号, ...

  4. 二十四种设计模式:桥接模式(Bridge Pattern)

    桥接模式(Bridge Pattern) 介绍将抽象部分与它的实现部分分离,使它们都可以独立地变化. 示例有一个Message实体类,对它的操作有Insert()和Get()方法,现在使这些操作的抽象 ...

  5. 桥接模式(Bridge Pattern)

    1,定义           桥接模式(Bridge Pattern),也称为桥梁模式,其用意是将抽象化与实现化脱耦,使得两者可以独立的变化,它可以使软件系统沿着多个方向进行变化,而又不引入额外的复杂 ...

  6. c#桥接模式(bridge结构模式)

    桥接模式(bridge结构模式)c#简单例子 在前面的玩家中每增加一个行为,就必须在每个玩家中都增加,通过桥接模式将行为提取出来了,减少变化 ? 1 2 3 4 5 6 7 8 9 10 11 12 ...

  7. 桥接模式-Bridge(Java实现)

    桥接模式-Bridge 桥梁模式的用意是"将抽象化(Abstraction)与实现化(Implementation)脱耦, 将"类的功能层次结构" 与 "类的实 ...

  8. 设计模式 -- 桥接模式(Bridge)

    写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------主要内容包括: 初始桥接模式 ...

  9. Net设计模式实例之桥接模式( Bridge Pattern)

    一.桥接模式简介(Brief Introduction) 桥接模式(Bridge Pattern),将抽象部分与它的实现部分分离,使的抽象和实现都可以独立地变化. Decouple an abstra ...

随机推荐

  1. requests 返回 521

    网页端抓数据免不了要跟JavaScript打交道,尤其是JS代码有混淆,对cookie做了手脚.找到cookie生成的地方要费一点时间. 那天碰到这样一个网页,用浏览器打开很正常.然而用request ...

  2. <每日一题>题目14:拷贝的问题

    ''' 拷贝的问题 引用:无论怎么变都一起变 浅拷贝:只拷贝父对象,不会拷贝父对象中的子对象 深拷贝:完全拷贝,重新划分内存空间 ''' 具体如下图: 题目: #求a.b.c.d的值 import c ...

  3. 实现ViewPager的联动效果

    参考链接:android - Synchronizing two ViewPagers using OnPageChangeListener - Stack Overflow 其中有个非常完美的解决方 ...

  4. Cefsharp实现快捷键功能

    原文:Cefsharp实现快捷键功能 1 . 实现IKeyboardHandler接口 public class KeyBoardHander : IKeyboardHandler { public ...

  5. 在 U-BOOT 对 Nand Flash 的支持

    1.1    U-BOOT 对从 Nand Flash 启动的支持 1.1.1   从 Nand Flash 启动 U-BOOT 的基本原理 1. 前 4K 的问题 如果 S3C2410 被配置成从 ...

  6. JS规则 自加一,自减一 ( ++和- -) 【mynum = mynum + 1;//等同于mynum++;】

    自加一,自减一 ( ++和- -) 算术操作符除了(+.-.*./)外,还有两个非常常用的操作符,自加一"++":自减一"--".首先来看一个例子: mynum ...

  7. go string和[ ]byte

    https://www.cnblogs.com/zhangboyu/p/7623712.html

  8. struts2文件上传,文件类型 allowedTypes对应

    '.a' : 'application/octet-stream', 2 '.ai' : 'application/postscript', 3 '.aif' : 'audio/x-aiff', 4 ...

  9. 【案例】DIV随鼠标移动而移动

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 有关阿里云对SaaS行业的思考,看这一篇就够了

    过去二十年,随着改革开放的深化,以及中国的人口红利等因素,中国诞生了大批To C的高市值互联网巨头,2C的领域高速发展,而2B领域一直不温不火.近两年来,在C端流量饱和,B端数字化转型来临的背景下,中 ...