`
liuwei8728
  • 浏览: 33629 次
  • 性别: 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  
通俗点讲:实现系统有多角度的分类,每一种分类又都有可能变化,那么把这种变化分离出来让他们独立的变化,减小耦合度

相关推荐

    设计模式之桥梁模式实现

    首先,理解桥梁模式的关键在于区分抽象和实现。在传统的继承关系中,抽象类通常包含了实现细节,而桥梁模式则通过引入一个额外的抽象层,即“桥梁”,将这两者解耦。这样,抽象类只负责定义接口,而实现细节由具体的...

    桥梁模式实例

    首先,让我们理解桥梁模式的核心组件。在桥梁模式中,主要有四个角色: 1. 抽象接口(Abstraction):定义了抽象接口,它通常是抽象类,包含了业务逻辑,并且持有实现类的引用。 2. 扩展抽象接口(Refined ...

    桥梁模式DEMO

    《桥梁模式DEMO》 ...在《DesignPattern1.8》这个压缩包中,可能包含了作者实现的桥梁模式DEMO代码,包括Java或其他编程语言的源文件,读者可以通过阅读和运行这些代码来更好地理解和掌握桥梁模式的使用。

    设计模式的理解浅析

    ### 设计模式的理解浅析 #### 单例模式在共享数据中的应用 单例模式是一种常用的软件设计模式,它的核心在于确保某个类只有一个实例,并提供一个全局访问点。这种模式非常适用于那些在整个项目中需要一个共享访问...

    Android学习之浅谈对MVC模式和MVP模式的理解

    在Android开发领域,理解并应用合适的架构模式对于创建可维护、可扩展的代码至关重要。本文将深入探讨两种常见的设计模式——MVC(Model-View-Controller)和MVP(Model-View-Presenter),并结合实际的TestMVP项目...

    设计模式实例 装饰 工厂 桥梁 观察者

    4. **桥梁模式**: 桥接模式也是一种结构型设计模式,它将抽象部分与它的实现部分分离,使它们都可以独立地变化。在Java中,桥接模式可以用来解耦抽象和实现,使得两者可以独立发展,增加系统的灵活性。例如,如果...

    [结构型模式] 适配器模式的理解

    适配器模式是一种结构型设计模式,它允许不兼容的接口之间进行通信,通过创建一个适配器对象作为中间桥梁,使得原本不匹配的接口能够协同工作。在软件开发中,适配器模式的应用十分广泛,尤其是在处理遗留系统或者...

    [结构型模式] 桥接模式的理解

    通过桥接模式,我们可以将一个大类的职责分解为两个独立的层次,即抽象层和实现层,它们之间通过接口进行连接,形成一种“桥梁”。 首先,让我们理解一下“概念图”和“类图”在桥接模式中的作用。概念图通常用于...

    PBL模式下桥梁工程教学改革初探.docx

    【桥梁工程教学现状】目前,桥梁工程的教学普遍存在的问题是理论课与课程设计分开进行,导致学生在短时间内完成大量任务,往往只能机械模仿,无法深入理解和运用知识。此外,教学方法多以教师讲解为主,学生被动接受...

    MVP模式的理解

    **MVP模式的理解** MVP(Model-View-Presenter)模式是软件开发中的一种设计模式,主要用于Android和Web应用中,以实现清晰的代码结构和提高可测试性。MVP模式是MVC(Model-View-Controller)模式的一个变种,它在...

    自然语言处理和模式识别.zip

    作为NLP和模式识别的桥梁,机器学习提供了算法和模型来自动学习特征和规律。监督学习、无监督学习和强化学习是机器学习的主要范式。在NLP中,常用的监督学习算法有朴素贝叶斯、逻辑回归,以及深度学习模型如卷积...

    23种极容易理解的设计模式

    7. **桥梁模式 (Bridge)**: 桥梁模式分离了抽象和实现,使得两者可以独立变化。比如,根据不同场合(早上、晚上)和对象状态(新衣服、新发型)组合不同的问候语,将抽象的问候行为与具体的表达方式分离,使两者可以...

    设计模式之美—学习笔记

    适配器模式(Adapter)允许不同接口的对象协同工作,桥梁模式(Bridge)将抽象部分与其实现部分分离,使它们可以独立变化。装饰模式(Decorator)可以在运行时动态地给对象添加新的行为或责任,而代理模式(Proxy)...

    桥梁跨越的极限-word资料.pdf

    这些可视化结果对于决策者和研究人员来说,能够快速理解数据背后的趋势和模式。 在提及的具体桥梁数据中,我们看到一些著名的桥梁如布鲁克林大桥、曼哈顿大桥、乔治·华盛顿大桥和金门大桥的跨度。这些数据可以用来...

    最容易理解的23种模式

    - **应用场景**: 当一个类的行为需要根据环境或者条件变化时,可以使用桥梁模式来分离抽象和实现,使得它们可以独立变化。例如,文中提到的根据不同情境变化问候语的例子。 - **模式特点**: 分离抽象与实现,使得...

    设计模式_行为模式

    这类模式涉及到系统的行为和控制流程,帮助开发者更好地理解和控制软件的行为。在这个“设计模式_行为模式”主题中,我们将深入探讨几种关键的行为模式。 1. 责任链模式(Chain of Responsibility):此模式允许...

    x86汇编语言:从实模式到保护模式.zip

    它详细介绍了x86架构下汇编语言的使用,以及从实模式到保护模式的转换过程,这对于理解现代计算机系统的基础至关重要。 x86汇编语言是Intel x86系列处理器的低级编程语言,它是计算机硬件和高级编程语言之间的桥梁...

    java 设计模式 mvc模式 单例模式 代理 工厂 简单工厂

    以上设计模式在实际项目中有着广泛的应用,理解并熟练运用这些模式可以提高代码的可读性、可维护性和复用性。例如,MVC模式在Web应用开发中非常常见,单例模式常用于日志服务、数据库连接池等需要全局唯一的场景,...

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

    所涉及的设计模式包括工厂模式、单例模式、建造模式、原型模式、适配器模式、桥梁模式、组合模式、装饰模式、门面模式、享元模式、代理模式、责任链模式、命令模式、解释器模式、迭代器模式、调停者模式、备忘录模式...

Global site tag (gtag.js) - Google Analytics