一、定义
合成/聚合原则:尽量使用合成/聚合,尽量不要使用类继承。(聚合表示弱的拥有关系,A可以包含B但是B不是A对象的一部分;合成是强的拥有关系:体现了严格的部分和整体的关系,部分和整体的生命周期一样。Eg:翅膀合成大雁,大雁聚合成雁群。)
合成/聚合的优点:有助于保持每个对象的封装,并被击中在单个任务上。这样类和类的继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。
桥接模式:将抽象部分与它的实现部分分离,使他们都可以独立的变化,即用抽象类和派生类来实现自己的对象。:实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。Eg:两个手机品牌,每个品牌都有对应通讯录和游戏,希望增加播放器功能。
二、结构图
三、代码示例
1、测试桥接模式Action.java
/**
* 测试桥接模式
* @author lattice
*
*/
public class Action {
public static void main(String[] args) {
Abstraction ab=new RefinedAbstraction();
ab.setImplementor(new ConcreteImplementorA());
ab.operation();
ab.setImplementor(new ConcreteImplementorB());
ab.operation();
}
}
2、桥接模式实现者Implementor.java
/**
* 实现者抽象类
* @author lattice
*
*/
public abstract class Implementor {
public abstract void operation();
}
/**
* 具体实现者
* @author lattice
*
*/
class ConcreteImplementorA extends Implementor{
@Override
public void operation() {
System.out.println("执行具体实现A的操作");
}
}
class ConcreteImplementorB extends Implementor{
@Override
public void operation() {
System.out.println("执行具体实现B的操作");
}
}
/**
* 被提炼类
* @author lattice
*
*/
class Abstraction{
protected Implementor implementor;
public void setImplementor(Implementor implementor){
this.implementor=implementor;
}
public void operation(){
this.implementor.operation();
}
}
/**
*
* @author lattice
*
*/
class RefinedAbstraction extends Abstraction{
@Override
public void operation() {
this.implementor.operation();
}
}