////转载别的作者的,我看到好文章怕以后忘记地址了,所以转到自己blog看,希望原作者能够原谅///////////////////////
图
将抽象部分与它的实现部分分离,使它们都可以独立地变化。(GoF)
场景
现在我们有很多表要处理,同时又有很多操作要做。最简单的做法是在一个类里做完所有的操作,如我们在EJB服务器端的实现中进行JDBC操作。可是这样一来这个类将无比巨大,大到四只眼(眼睛兄)都看不过来!
有什么好办法能够降低这样操作的杂乱性呢?我们注意到这里有两个概念,分别是“表单(Table)”和“操作(Operator)”。也就是说这里有两个部分——“抽象”和“实现”。我们将这两个部分进行分离,然后根据需要,分别继承和实现表单和操作。这样我们就可以方便地通过表单和操作的组合来实现我们的工作了。
操作如:
java 代码
Table tbl1 = new Table1(new Insert());
tbl1.work();
Table tbl2 = new Table2(new Update());
tbl2.work();
Table1和Table2都是Table的子类,他们都映射到数据库中特定的表。Insert和Update都是接口Operator的实现,分别完成特定的数据库操作。
好了,下面来先看看Operator的实现代码。
java 代码
public interface Operator {
/**
* 操作
*
* @param arg 传入的参数
* @return 操作结果
*/
String work(String arg);
}
我们需要能对数据库进行插入和修改操作,因此分别建立Insert和Update类。
java 代码
// 插入操作
public class Insert implements Operator {
public String work(String arg) {
String rs = "insert " + arg;
return rs;
}
}
java 代码
// 修改操作
public class Update implements Operator {
public String work(String arg) {
String rs = "update " + arg;
return rs;
}
}
好了,我们再来看看抽象部分的实现。这里我们的对象是Table。
java 代码
public abstract class Table {
// 内置一个操作接口
protected Operator impl = null;
public Table(Operator impl) {
this.impl = impl;
}
/**
* 由子类来具体实现此操作
*/
public abstract void work();
}
现在我们有两个表单需要进行操作,他们分别是Table1和Table2。
java 代码
public class Table1 extends Table {
public Table1(Operator impl) {
super(impl);
}
public void work() {
System.out.println(this.impl.work("Table1"));
}
}
java 代码
public class Table2 extends Table {
public Table2(Operator impl) {
super(impl);
}
public void work() {
System.out.println(this.impl.work("Table2"));
}
}
这样我们在进行数据库的操作的时候,便可以随意地根据实际情况进行表单与操作的组合,将表单与操作桥接在一起来完成我们的任务。
java 代码
// 对table1进行插入操作
Table tbl1 = new Table1(new Insert());
tbl1.work();
// 对table2进行修改操作
Table tbl2 = new Table2(new Update());
tbl2.work();
小结
Bridge设计模式感觉上是通过将对象与操作进行分离,然后对这两个基本概念进行继承及实现,通过对对象及操作的各种组合来完成相应的工作。
P.S.一直想不到一个好的例子来说明Bridge模式,今天吃早饭的时候突然想到可以用来应用于数据库操作。这几天就先按照这种想法做一个demo看看效果如何。呵呵,不知道会不会又是一种重复造轮子的行为呢?不过作为一种实践体会我觉得也很值得。
分享到:
相关推荐
c++设计模式-结构型模式-桥接模式;qt工程,c++简单源码; 桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度...
初学桥接模式时的具体实现。若理解有误,还请各位大S纠正。
Bridge 桥接模式(结构型模式)视频
C#面向对象设计模式 Bridge 桥接模式 视频讲座下载
C#面向对象设计模式纵横谈(8):Bridge 桥接模式(结构型模式) 体验课程
C#面向对象设计模式纵横谈(8):Bridge 桥接模式(结构型模式) (Level 300)
创建型模式 (100%) 设计模式面面观(8):创建型模式总结 (100%) 设计模式面面观(9):适配器模式(Adapter Pattern)-结构型模式 (100%) 设计模式面面观(10):桥接模式(Bridge Pattern)-结构型模式 ...
为了解决这种多维度变化,又不引入复杂度,这就要使用Bridge模式。 3. 模式中的角色 2.1 抽象(Abstraction):定义抽象接口,该接口中包含实现具体行为、具体特征的Implementor接口。 2.2 提炼的抽象...
- 桥接模式(Bridge) - 组合模式(Composite) - 外观模式(Facade) - 享元模式(Flyweight) - 观察者模式(Observer) - 模板方法模式(Template Method) - 策略模式(Strategy) - 责任链模式(Chain of ...
7、桥接模式(bridge) 用意:将抽象部分和实现部分分离,使他们可以独自变化
设计模式 桥接设计模式示例
桥接模式的示例代码和文档,学习桥接模式的参考资料。
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要资源... 这是第8节:结构型模式Bridge桥接模式
桥接模式是一种结构型设计模式,它的目的是将抽象化与实现化解耦,使得它们可以独立变化。这种模式主要用于处理当一个类存在两个或多个独立的变化的维度时的情况,例如,当一个类的抽象部分和实现部分可能发生变化,...
ros-winbox中的桥接设置 看了就明白怎么做的
桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立地变化。 这里说明一下,什么叫抽象与它的实现分离,这并不是说,让抽象类与其派生类分离,因为这没有任何意义。实现指的是抽象类和它的派生类...
php /** * 桥接模式 * * 将抽象部份与它实现部分分离,使用它们都可以有独立的变化 */ abstract class Implementor { abstract public function operation(); } class ConcreteImplementorA extends Implementor { ...
移动公司 吉比特 光猫 ZXHN G6611 路由模式router 改 桥接模式bridge 方法 详细教程