设计模式学习笔记——桥梁模式
来源:互联网 发布:唯一约束 mysql 编辑:程序博客网 时间:2024/05/22 14:47
定义:
将抽象和实现解耦,使得两者可以独立地变化。(抽象角色引用实现角色,实现抽象角色的部分实现)
桥接模式主要是为了补充继承的缺点的,继承有什么缺点呢?即强侵入,父类有这个方法,子类也必须有这个方法,这是不可选择的,会带来扩展性的问题。比如A类有一个方法,B类继承了A类的这个方法,C类继承了B类的这个方法,如果B类要重写父类的这个方法,那么它就要修改和C类的关系,这就带来了很大的风险。
通用类图如下:
代码:
//抽象化角色public abstract class Abstraction {private Implementor implementor;//这里在抽象类中增加了一个构造函数,是为了提醒子类,尽量明确的指定实现者public Abstraction(Implementor implementor) {this.implementor = implementor;}public Implementor getImplementor() {return implementor;}public void setImplementor(Implementor implementor) {this.implementor = implementor;}//自身的属性和行为public void request(){this.implementor.doSomething();}}
//抽象化角色的具体实现public class ConcreteAbstraction1 extends Abstraction{public ConcreteAbstraction1(Implementor implementor) {super(implementor);}//重写父类的行为@Overridepublic void request() {super.request();super.getImplementor().doAnything();}}
//抽象化角色的具体实现public class ConcreteAbstraction2 extends Abstraction{public ConcreteAbstraction2(Implementor implementor) {super(implementor);}//重写父类的行为@Overridepublic void request() {// TODO Auto-generated method stubsuper.request();super.getImplementor().doAnything();}}
//实现类的接口public interface Implementor {public void doSomething();public void doAnything();}
public class ConcreteImpl1 implements Implementor {@Overridepublic void doSomething() {System.out.println("1 do some thing...");}@Overridepublic void doAnything() {System.out.println("1 do any thing...");}}
public class ConcreteImpl2 implements Implementor {@Overridepublic void doSomething() {System.out.println("2 do some thing...");}@Overridepublic void doAnything() {System.out.println("2 do any thing...");}}
public class Client {public static void main(String[] args) {Implementor implementor2=new ConcreteImpl2();Abstraction abs=new ConcreteAbstraction2(implementor2);abs.request();Implementor implementor1=new ConcreteImpl1();Abstraction abs1=new ConcreteAbstraction2(implementor1);abs1.request();}}
桥梁模式的优点:
1、 抽象和实现分离
实现可以完全不受抽象的约束,不用再绑定在一个固定的抽象层次上,解决了继承的缺点。
2、优秀的扩展能力
抽象和实现都可以独立的进行扩展。
3、 实现细节对客户的透明
客户不用关心细节的实现,它已经通过抽象层通过聚合关系完成了封装。
桥梁模式的使用场景:
1、 不希望或不使用使用继承的场景,例如继承层次过度,无法更细化设计颗粒;
2、抽象或接口不稳定的场景;
3、重用性要求较高的场景,设计的颗粒度越细,则被重用的可能性就越大,而采用继承则受父类的限制,不可能出现太细的颗粒度。
- 设计模式学习笔记——桥梁模式
- 设计模式学习笔记——桥梁模式
- 设计模式学习笔记--桥梁(Bridge)模式
- 设计模式—桥梁模式
- 设计模式—桥梁模式
- 设计模式笔记--桥梁模式
- 设计模式——桥梁模式
- 设计模式——桥梁模式
- Java设计模式—桥梁模式
- Java设计模式笔记之桥梁模式
- 设计模式之禅笔记-桥梁模式
- 设计模式之结构类模式——桥梁模式
- 设计模式学习之桥梁模式
- 设计模式:桥梁模式
- 设计模式--桥梁模式
- 设计模式--桥梁模式
- 设计模式---桥梁模式
- 设计模式:桥梁模式
- 百度跟csdn的过节
- C++中的常量
- 程序从shell接收到的参数
- android加载大量图片内存溢出bitmap size exceeds VM budget的解决办法。
- linux动态链接库示例
- 设计模式学习笔记——桥梁模式
- Struts2中的文件下载
- Android 实现 按钮从两边移到中间动画效果
- C++中的逗号运算符
- opencv 2.4 image stitching
- 滤波电路的时域和频域分析
- linux 远程连接服务器
- 对Activity的理解
- 解决waiting for jockey-backend to exit