`
liuwei8728
  • 浏览: 32371 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

桥梁模式的理解

阅读更多

最近在Java编程过程中,考虑到这么个问题:

根据面向对象的继承关系,子类继承父亲的方法。目前有这么个场景:类A是个抽象类,其中有n个方法,类B是类A的子类,类C是类B的子类。假若A中有一个方法operate(),那么BC均未对operate()方法进行重写,直接继承了Aoperate方法实现操作。随着项目的壮大,一定有很多的地方使用到BC两个类。假若某一天,突然有个需求:需要Boperate()函数进行重写。那么我们敢直接拿B进行开刀吗?答案稳定是否定的!试想下,要是对B进行开刀,那么C咋办?C继承的是B,如果B的方法改变,子类C也将随之进行更改,这样的结果将不符合需求。先用代码对上面的场景进行模拟下吧。

Father

/**

 * @author lw

 * 父亲类方法有a b c三种方法,其中c是抽象方法。

 */

public abstract class Father {

 

    public void a(){

       System.out.println("Father a函数!");

    };

    public void b(){};

   

    public abstract void c();

}

Son1

/**

 * @author lw

 * 儿子继承父亲,重写父亲的抽象方法c

 */

public class Son1 extends Father {

 

    @Override

    public void c() {

       System.out.println("Son1 C函数重写!");

    }

}

GrandSon1

/**

 * @author lw

 * 孙子继承儿子的方法

 */

public class GrandSon1 extends Son1 {

 

}

 

    那么我们应该怎么解决该问题了。前提是只需要更改B中的a方法,而不能修改C中的a方法。这时就可以使用桥梁模式了。具体思路就是把A中需要变换的方法给抽出来组装为一个类(接口),然后用D类对接口中的方法进行实现。因此Ba方法的修改,只需要调用D中的a方法实现。也就是说哪个方法需要实现,哪个类需要重写该方法,就把桥搭接过去。

Father

/**

 * @author lw

 * 父亲类方法有a b c三种方法,其中c是抽象方法。

 */

public abstract class Father {

 

    public void a(Bridge r){

       System.out.println("Father a函数!");

    };

    public void b(){};

   

    public abstract void c();

}

Son1

/**

 * @author lw

 * 儿子继承父亲,重写父亲的抽象方法c

 */

public class Son1 extends Father {

 

    @Override

    public void c() {

       System.out.println("Son1 C函数重写!");

    }

 

    @Override

    public void a(Bridge b) {

       if(b==null)

           super.a(b);

       else

           b.a();

    }

}

接口Bridge

public interface Bridge {

    public void a() ;

}

 

 

BridgeImpl

public class BridgeImpl implements Bridge{

 

    @Override

    public void a() {

       System.out.println("桥梁模式搭建出来的a方法!");

    }

}

实现类:

new GrandSon1().a(new BridgeImpl());

       new GrandSon1().a(null);

 

因此这样实现之后,Sona方法进行了重写,同时GrandSon1能够继承Fathera方法。本来通过继承,实现了强关联,是一种强耦合关系。桥梁模式的作用就是实现类间的低耦合。

那么什么叫桥梁模式了,桥梁模式到底做什么用了?我们用上面的例子进行模拟说明。设想FatherSonGrandSon1是业务抽象角色,他们很好地通过继承实现了强关联。设想BridgeBridgeImpl是业务实现角色,它是对Father中抽取出来的方法a的实现。也就说业务抽象角色的部分实现是由业务实现角色实现。通过抽象角色和实现角色的分离,从而实现类间解耦。因此桥梁模式的作用就是实现类间解耦,这也是它的优点。两种角色可以自己进行扩展,但互相之间不影响,这也符合ocp原则(开放封闭原则)。

目前网上对桥梁模式的实现有很多实例,这里就没神马必要去进行模拟实现了。但是JDBC的实现,还是很有必要进行研究的……

 

分享到:
评论
1 楼 liuwei8728 2011-01-11  
通俗点讲:实现系统有多角度的分类,每一种分类又都有可能变化,那么把这种变化分离出来让他们独立的变化,减小耦合度

相关推荐

    深入浅出java设计模式(高清中文PDF)

    桥梁模式 7.组合模式 8.装饰模式 9.门面模式 10.享元模式 11.代理模式 12.责任链模式 13.命令模式 14.解释器模式 15.迭代器模式 16.调停者模式 17.备忘录模式 18.观察者模式 19.策略模式 20.状态模式 ...

    某市跨海桥梁交通工程PPP项目投标文件技术部分 (146页).docx

    1、 PW咨询公司国际隧道、桥梁部分案例简介 78 1、 当前国内和国外交通投融资模式 82 2、 方案设计的基本思路 85 3、 PPP架构股权担保措施 86 4、 投融资模型设计解决的核心问题 87 5、 投融资模型方案推荐 87 (二...

    设计模式解析

    本书是对现有设计模式教材的补充,可以架起初级教材 (如UML Distilled) 和更高级模式图书之间的桥梁。 ——James Noble <br/>本书是最简洁、清晰、实用的设计模式著作,应用最新的Java示例,为程序员和架构...

    java面试题 你对MVC的理解,MVC有什么优缺点

    MVC设计模式(应用观察者模式的框架模式) M: Model(Business process layer),模型,操作数据的业务处理层,并独立于表现层(Independent of presentation)。 V: View(Presentation layer),视图,通过客户端数据类型...

    google_sdk_android5

    bridge)模式 桥梁模式是一个非常有用的模式,也是比较复杂的一个模式。熟悉这个模式对于理解面向对象的设计原则,包括"开-闭

    2020最新BAT java经典必考面试题.pdf

    2020最新BAT java经典必考面试题...继承让变化 中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段 (如果不能理解请阅读阎宏博士的《Java 与模式》或《设计模式精解》中关于 桥梁模式的部分)。

    ASP.NET小结之MVC, MVP, MVVM比较以及区别(二)

    由于自己对于这些模式的理解也是有限,对于这些模式的比较,是结合自己的理解,一些地方不一定准确,但是只有亮出自己的观点,才能抛砖引玉不是? 欢迎各位拍砖。:) 代码如下:阅读目录: 四. MVP模式  4.1 MVP的思想...

    函数式编程另类指南

    的确,关于函数式编程的文章和论文难于理解,但他们本来...是一座从我们命令式(imperative)的思维模式到函数式编程的桥梁。去取杯咖啡回来继续读下去吧。可能你的同事很快就会开始取笑你对函数式编程发表的观点了。

    IT前沿技术论文.docx

    只不过在计算机领域的密码,这个少数人互相理解的桥梁是建立在信息论、 计算复杂性理论、统计学、组合学、抽象代 数以及数论上的,其技术上的复杂度限制了这个密码受众的范围。因为背后依托的数学理论错综复杂,也使...

    netconf-rest:将netconf调用转换为REST API for Fortigate的桥梁

    网络配置将netconf调用转换为REST API for Fortigate的桥梁它将监听netconf请求(端口830)并将其转换为REST API调用。 目前仅对Fortigate有效。 它不会在内部针对任何模式进行验证。 如果请求格式错误,即不是按照...

    电子商务网站调研报告(1).doc

    课 题 调 研 报 告 电子商务网站调研报告 张海波 1042157124 10级计科特色班A组 张怡文 信工 院 计算机科学 系 2011 年 9月 12 日 调研目的 了解在电子商务在不同平台下网站经营模式、盈利方式的差别。借此深入理解...

    电子商务网站调研报告.doc

    课 题 调 研 报 告 电子商务网站调研报告 张海波 10级计科特色班A组 张怡文 信工 院 计算机科学 系 2011 年 9月 12 日 调研目的 了解在电子商务在不同平台下网站经营模式、盈利方式的差别。借此深入理解服务外包 中...

    当下较新的30道VUE面试题!.rar

    了解过(用过)react或者angular吗,他们有什么区别? 答案 Vue 借鉴了 angular 的模板和数据绑定技术,又借鉴了 react 的组件化和虚拟 DOM ... view 表示视图层, ViewModel 是 View 和 Model 层的桥梁,数据绑定到 vi

    敏捷实践指南带书签版本

    欢迎阅读《敏捷实践指南》!本指南是项目管理协会...实践指南就是一座桥梁,可以帮助理解从预测法转向敏捷方法的途径。实际上,二者之间也 存在一些类似的活动(例如规划),尽管处理方式不同,但两种情况下都会发生。

    Pro Machine Learning Algorithms.pdf

    在对算法如何工作的高层次理解和了解更好地调整模型的螺母和螺栓之间架起桥梁。这本书将给你信心和技能时,开发所有主要的机器学习模式。在Pro机器学习算法中,您将首先在Excel中开发该算法,以便在用python/r实现...

    童心网创业计划书.zip

    通过创新的商业模式和贴心的服务,童心网将成为连接家庭、儿童和优质教育资源的重要桥梁。综上所述,童心网创业计划书展现了一个充满潜力的商业构想,它不仅关注经济利益,更体现了对社会价值和家庭教育重要性的深刻...

    Javaweb仓库管理系统项目源码.rar

    作为一个理想的毕业设计或课程设计项目,这个源码文件包具备了完整的文档说明和清晰的代码结构,便于学生理解、学习和修改。它采用了MVC架构模式,使得前端界面与后端逻辑分离,保证了系统的可维护性和扩展性。同时...

    Java面试题.docx

    继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段(如果不能理解请阅读阎宏博士的《Java与模式》或《设计模式精解》中关于桥梁模式的部分)。 - 封装:通常认为封装是把数据和...

    软件工程(5).pptx

    软件工程一体化案例分析教程(五) 杜育根 ygdu@sei.ecnu.edu.cn 本PPT教材: 杜育根.... 5.1.1 分析概述 分析是需求和设计的桥梁,它要把系统必须提供的服务的清晰描述转 化为对要处理对象的正确理解,

Global site tag (gtag.js) - Google Analytics