您的位置:首页 > 编程语言 > Java开发

Java设计模式之桥接模式

2017-12-20 15:25 375 查看
合成/聚合复用原则:尽量使用合成/聚合,尽量不要使用类继承。聚合表示一种弱的 ‘拥有’ 关系,体现A对象可以包含B对象,但B对象不是A对象的一部分;合成则是一种强的‘拥有’ 关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样,比方说雁有两个翅膀,翅膀与大雁是部分与整体的关系,并且它们的生命周期是相同的,于是大雁和翅膀就是合成关系,而大雁是群居动物,所以每只大雁都是属于一个雁群,一个雁群可以有多只大雁,所以大雁和雁群是聚合关系。

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






实现类:

public abstract class Implementor {
public abstract void operation();
}
class ConcreteImplemtorA extends Implementor {
@Override
public void operation() {
System.out.println("ConcreteImplemtorA的方法执行");
}
}
class ConcreteImplemtorB extends Implementor {
@Override
public void operation() {
System.out.println("ConcreteImplemtorB的方法执行");
}
}抽象类:
public abstract class Abstraction {
protected Implementor implementor;// 桥接模式的关键,使得Abstraction聚合Implementor
private String name;

public Abstraction(String name) {
this.setName(name);
}

public void setImplementor(Implementor implementor) {
this.implementor = implementor;
}

public void operation() {
System.out.print("Abstraction-" + this.getName() + ": ");
implementor.operation();
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

class AbstractionA extends Abstraction {

public AbstractionA(String name) {
super(name);
}

@Override
public void operation() {
super.operation();
}
}

class AbstractionB extends Abstraction {

public AbstractionB(String name) {
super(name);
}

@Override
public void operation() {
super.operation();
}
}客户端:
public class BridgeClient {//客户端
public static void main(String[] args) {
Abstraction a = new AbstractionA("A");
a.setImplementor(new ConcreteImplemtorA());
a.operation();
a.setImplementor(new ConcreteImplemtorB());
a.operation();

Abstraction b = new AbstractionB("B");
b.setImplementor(new ConcreteImplemtorA());
b.operation();
b.setImplementor(new ConcreteImplemtorB());
b.operation();

// 这样通过使用“组合/聚合复用原则”
// 如果继续有AbstractionC ... 或者ConcreteImplemtorC ...
// 只需要扩展类即可,不需要修改现有类,符合“开放-封闭”原则
}
}运行结果:
Abstraction-A: ConcreteImplemtorA的方法执行
Abstraction-A: ConcreteImplemtorB的方法执行
Abstraction-B: ConcreteImplemtorA的方法执行
Abstraction-B: ConcreteImplemtorB的方法执行可以把每个分类独立粗来,让它们各自变化,再使用聚合关系将它们联系起来。这种模式就是聚合模式。
应用场合:

当实现系统可能有多个角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合,也就是说,在发现我们需要多角度去分类实现对象的时候,就应该考虑用桥接模式了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: