设计模式学习之桥梁模式

什么是桥梁模式?

    桥梁模式是将抽象与实现解耦,使得两者可以独立的变化。那么我们的重点就是如何将抽象与实现解耦?

桥梁模式的关键是什么?

    如下如为桥梁模式的类图,其中的关键就是Abstraction和Implementor的关系。Abstraction为抽象角色,Implementor为实现角色,其中抽象类依赖实现类。

    

    下面我们看一下桥梁模式的四个角色:

  • Abstraction - 抽象化角色:它的主要职责是定义出该角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类。
  • Implementor - 实现化角色:它是接口或者抽象类,定义角色必须的行为和属性。
  • RefinedAbstraction - 修正抽象化角色:它引用实现化角色对修正化角色进行修正。
  • ConcreteImplementor - 具体实现化角色:它实现接口或抽象类定义的行为和属性。
    对于桥梁模式,主要解决的是多个模式控制下的复杂性,例如我们搬家时会准备很多箱子,包括有纸箱、布箱,有大箱子、中箱子、小箱子等。我们的UML设计如下:

    SizeImpl接口(实现化角色)代码:
public interface SizeImpl {

    public int size();
}
    Big类(具体实现化角色)代码:
public class Big implements SizeImpl {

    @Override
    public int size() {
        return 20;
    }
}
    Small类(具体实现化角色)代码:
public class Small implements SizeImpl {

    @Override
    public int size() {
        return 5;
    }
}
    AbstractBox抽象类(抽象化角色)代码:
public abstract class AbstractBox {

    private SizeImpl size;

    public SizeImpl getSize() {
        return size;
    }

    public void setSize(SizeImpl size) {
        this.size = size;
    }

    public abstract void makeBox();

}
    PaperBox类(修正抽象化角色)代码:
public class PaperBox extends AbstractBox {

    @Override
    public void makeBox() {
        System.out.println("material:paper");
        System.out.println("size:" + getSize().size());
    }
}
    client代码:
public class BoxClient {

    public static void main(String[] args) {
        PaperBox paperBox = new PaperBox();
        paperBox.setSize(new Big());
        paperBox.makeBox();
    }

}
    执行结果如下:
material:paper
size:20
    这样做的好处是如果我们想扩展皮箱,不需要再去定义大皮箱、中皮箱、小皮箱三个类,只需要定义一个皮箱类。
桥梁模式的优点
  • 实现抽象与现实的分离,很好的解决了继承的缺点。
  • 优秀的扩展能力。
  • 实现细节对客户透明。
桥梁模式的使用场景
  • 系统需要再抽象化角色与具体化角色之间增加更多灵活性。
  • 客户端要求实现化角色的任何改变不影响客户端。
  • 一个构建有多于一个的抽象化角色和实现化角色。
  • 虽然系统中使用继承没有问题,但是系统中的抽象化角色与具体化角色需要独立变化。
参考
http://blog.csdn.net/xingjiarong/article/details/50132727





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值