目录
桥接模式
桥接模式是一种很实用的结构型设计模式,如果系统中的某个类存在两个独立变化的维度,通过桥接模式可以将这两个维度分离出来,使两者可以独立扩展.桥接模式用一种巧妙的方式处理多层继承存在的问题,用抽象关联来取代传统的多层继承,将类之间的静态关系转换为动态的对象组合关系,使得系统更加灵活,并易于扩展,同时有效地控制了系统中类的个数.
桥接模式概述
在桥接模式中将两个独立变化的维度设计为两个独立的继承等级结构,而不是将二者耦合在一起形成多层继承结构.桥接模式在抽象层建立起一个抽象关联,该关联关系类似一条连接两个独立继承结构的桥,故名桥接模式.
桥接模式:将抽象部分与它的实现部分解耦,使得两者都能够独立变化.
桥接模式是一种对象结构型模式,它又被称为柄体模式或接口模式.桥接模式用一种巧妙的方式处理多层继承存在的问题.用抽象关联取代了传统的多层继承,将类之间的静态关系转换为动态的对象组合关系,使得系统更加灵活,并易于扩展,同时有效地控制了系统中类的个数.
桥接模式结构
桥接模式包含4个角色:
- 抽象类.
- 扩充抽象类.
- 实现类接口.
- 具体实现类.
桥接模式实现
桥接模式中体现了很多面向对象设计原则的思想,包括单一职责原则,开闭原则,合成复用原则,里氏代换原则,依赖倒置原则等.
在使用桥接模式时首先应该识别出一个类所具有的两个独立变化的维度,将它们设计为两个独立的继承等级结构,为两个维度都提供抽象层,并建立抽象耦合.
实在很不好意思哈,到处盗图- -
实现类接口
public interface Implementor{
public void operationImpl();
}
具体实现类
public class ConcreteImplementor implements Implementor{
public void operationImpl(){
//具体业务方法的实现
}
}
抽象类
public abstract class Abstraction{
protected Implementor impl; //定义实现类接口对象
public void setImpl(Implementor impl){
this.impl = impl;
}
public abstract void operation(); //声明抽象业务方法
}
扩充抽象类
pubic class RefinedAbstraction extends Abstraction{
public void operation(){
//业务代码
impl.operationImpl(); //调用实现类的方法
//业务代码
}
}
桥接模式与适配器模式的联用
在软件开发中,适配器模式通常与桥接模式联合使用.
桥接模式的优/缺点与适用环境
桥接模式的优点:
- 可以分离抽象接口及其实现部分,它是比多层继承方案更好的解决方法,极大地减少了子类的个数,此外桥接模式提高了系统的可扩展性,在两个变化维度中任意扩展一个维度都不需要修改原有系统,符合开闭原则.
桥接模式的缺点:
- 会增加系统的理解与设计难度,且正确识别出系统中的两个独立变化的维度并不是一件容易的事情.
桥接模式适用环境:
- 需要在抽象化和具体化之间增加更多的灵活性,避免在两个层次之间建立静态的继承关系.
- 抽象部分和实现部分可以用继承的方式独立扩展而互不影响.
- 一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立进行扩展.
- 不希望使用继承或因为多层继承导致系统类的个数急剧增加的系统.