桥接模式,将抽象部分与它的实现部分分离,使他们都可以独立的变化。
使用场景:
- 如果一个系统需要在构件的抽象化角色和具体化角色之间添加更多的灵活性,避免在两个层次之间建立静态的联系。
- 设计要求实现化角色的任何改变不应当影响客户端,或者实现化角色的改变对客户端是完全透明的。
- 需要跨越多个平台的图形和窗口系统上。
- 一个类存在两个独立变化的维度,且两个维度都需要进行扩展。
优点:
可以使系统的两个维度独立的变化,互不影响。
UML图:
代码实现:
package com.liran.main.DesignPattern.桥接模式;
/**
* 桥接模式
* Created by LiRan on 2016-03-03.
*/
public class Brtdge_pattern {
public static void main(String[] args) {
Abstraction abstraction=new RefinedAbstraction();
abstraction.setImplementor(new ConcreteImplementorA());
abstraction.Operation();
abstraction.setImplementor(new ConcreteImplementorB());
abstraction.Operation();
}
}
package com.liran.main.DesignPattern.桥接模式;
/**
* 抽象
* Created by LiRan on 2016-03-03.
*/
public class Abstraction {
protected Implementor implementor;
public void setImplementor(Implementor implementor) {
this.implementor = implementor;
}
public void Operation(){
implementor.Operation();
}
}
package com.liran.main.DesignPattern.桥接模式;
/**
* Created by LiRan on 2016-03-03.
*/
public class ConcreteImplementorA extends Implementor {
@Override
public void Operation() {
System.out.println("具体实现A的方法执行");
}
}
package com.liran.main.DesignPattern.桥接模式;
/**
* Created by LiRan on 2016-03-03.
*/
public class ConcreteImplementorB extends Implementor {
@Override
public void Operation() {
System.out.println("具体实现B的方法执行");
}
}
package com.liran.main.DesignPattern.桥接模式;
/**
* 实现
* Created by LiRan on 2016-03-03.
*/
abstract public class Implementor {
public abstract void Operation();
}
package com.liran.main.DesignPattern.桥接模式;
/**
* Created by LiRan on 2016-03-03.
*/
public class RefinedAbstraction extends Abstraction {
@Override
public void Operation() {
implementor.Operation();
}
}
源码下载:
Github