设计模式学习之桥梁模式

来源:互联网 发布:如何在mac上结束命令 编辑:程序博客网 时间:2024/05/09 13:57

什么是桥梁模式?

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

桥梁模式的关键是什么?

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





0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微信代购收到假货怎么办 苹果商店下载很慢怎么办 谷歌商店下载东西慢怎么办 买家说少发货了怎么办 人肉代购被海关扣了怎么办 韩国代购被海关扣了怎么办 爱奇艺开通自动续费忘了账号怎么办 小米手机云储存空间不足怎么办 路由器被黑了打不开网页怎么办 致人轻伤跑了怎么办 轻伤对方要30万怎么办 老公用老婆的钱怎么办 想注册个公司要怎么办 域名续费不知道找谁怎么办 代收快递弄丢了怎么办 货到付款的快递人不在怎么办 快递送货上门人不在怎么办 ems快递签收人不在怎么办 快递被别人取了怎么办 怎么办快递宗和收发点 快递电话写错了怎么办 网上买沙发想退货怎么办 买的电脑想退货怎么办 买了衣服想退货怎么办 天猫买药审核通过后不要了怎么办 京东维修无发票怎么办 京东维修没有发票怎么办 苹果6s外音没了怎么办 苹果6splus开不了机怎么办 顺丰快递寄件填错收件人地址怎么办 收快递电话换了怎么办 顺丰快递没人收怎么办 网购东西没收到怎么办 中通快递没收到怎么办 快递员不给验货怎么办 顺丰验货不要了怎么办 闲鱼买家掉包了怎么办 闲鱼正在退款中怎么办 拒收货物卖家拒绝退款怎么办 货物没问题淘宝卖家拒收怎么办 头发稀少长的慢怎么办