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的方法执行可以把每个分类独立粗来,让它们各自变化,再使用聚合关系将它们联系起来。这种模式就是聚合模式。
应用场合:
当实现系统可能有多个角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合,也就是说,在发现我们需要多角度去分类实现对象的时候,就应该考虑用桥接模式了。
桥接模式(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的方法执行可以把每个分类独立粗来,让它们各自变化,再使用聚合关系将它们联系起来。这种模式就是聚合模式。
应用场合:
当实现系统可能有多个角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合,也就是说,在发现我们需要多角度去分类实现对象的时候,就应该考虑用桥接模式了。
相关文章推荐
- Java设计模式_(结构型)_桥接模式
- 设计模式之桥接模式+适配器模式Java实现
- JAVA-桥接设计模式
- java设计模式之一 桥接模式
- Java 设计模式 之 桥接模式
- JAVA设计模式--桥接模式
- java 设计模式--桥接
- JAVA设计模式(07):结构型-桥接模式(Bridge)
- Java设计模式(八):桥接模式bridge
- JAVA设计模式(七)----桥接模式
- [译]Java 设计模式之桥接
- java结构型设计模式——桥接模式
- JAVA开发的23种设计模式之 --- 桥接模式
- java设计模式之桥接模式
- Java 设计模式 之 桥接模式
- JAVA设计模式初探之桥接模式
- Java开发中的23种设计模式详解----桥接模式(Bridge)
- JAVA设计模式初探之桥接模式
- java 23种常用设计模式之桥接模式(Bridge)
- Java23种设计模式案例:桥接模式(bridge)