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

桥梁模式 ----- bridge

阅读更多
桥梁模式的用意是将问题的抽象和实现分离开来实现,通过用聚合代替继承来解决子类爆炸性增长的问题。
比如我们有一个画图程序 有2个图形(Circle Rectangle )和2种画图方法(Drawing1 Drawing2)
图形可能会使用Drawing1来画图 也可能使用Drawing2来画图
在这个画图程序中有两个可变因素 一个是图形的种类 有可能会增加新的图形 另一个是画图方法 可能会有Drawing3出现
当系统有两个可变因素时 我就应该考虑到桥梁模式,至少它应该在你的脑子里闪过
在面向对象设计中有两条重要原则
1.找出变化并封装之
2.优先使用聚合而不是继承


这两条将在桥梁模式中得到完美体现

在上例中图形是一个变化 我们可以抽象出一个形状接口 和 一些形状类
interface Shape{
    void doDraw();
}
class Circle implements Shape{}
class Rectangle implements Shape{}


画图方法也可以抽象出一个Drawing接口 和 各种画法
interface Drawing{
    void draw();
}
class Drawing1 implements Drawing{}
class Drawing2 implements Drawing{}

最后将两个变化联系起来
在问题域中是图形使用画图方法 所有应该在Shape中使用Drawing
我们可以通过在具体的图形类中通过构造函数传入具体的画图方法来实现
如下

class Circle implements Shape{
    private Drawing drawing; 
    public Circle(Drawing drawing){
        this.drawing = drawing;
    }

    public void doDrow(){
        drawing.draw();
    }
}

class Client(){
    public static void main(String[] args){
        Shape circle = new Circle(new Drawing2());
        circle.draw();
    }
}


仔细体会了一下桥梁模式,感觉凡是‘调用和实现’之间的问题都可以用桥梁模式解决
比如说Dao层给Service层之间的调用,service作为调用方 dao为实现方
只不过service层只有一种实现罢了,可以看作是一种简化了的桥梁模

dao 可能有 HibernateDao JdbcDao。
service 使用dao
如下
interface Dao{
    List findAll();
}
class HibernateUserDao implements Dao{}
class JdbcUserDao implements Dao{}

interface UserService{
    List findAllUser();
}

class UserServiceImpl implements UserService{
    private Dao dao;
    public UserServiceImpl(Dao dao){
        this.dao = dao;
    }

    public List findAllUser(){
        dao.findAll();
    }
}

这个代码是不是给上面的画图程序很类似呢
不同之处就是service层只有一个实现UserServiceImpl
所以说是这是一种简化了的桥梁
分享到:
评论
8 楼 phoenix 2007-03-07  
鼓掌,写的简单易懂,很好,谢谢!
7 楼 intolong 2007-03-05  
xly_971223 写道
intolong 写道
lz给的例子抽象出shape没什么意义,shape应该不仅仅是doDraw()


请给出你的代码


概念是对的,但例子没足够说明。
Circle和Rectangle的那个变化没体现出来,如果只是直接委托给drawing,不做别的事。
吹毛求疵了,呵呵。
6 楼 xly_971223 2007-03-05  
intolong 写道
lz给的例子抽象出shape没什么意义,shape应该不仅仅是doDraw()


请给出你的代码
5 楼 intolong 2007-03-05  
lz给的例子抽象出shape没什么意义,shape应该不仅仅是doDraw()

不过注意封装变化和DI,很多模式都可以自己推出来
4 楼 aone 2007-03-05  
嗯,是时候研究一下设计模式了!!!
3 楼 xinmen220 2007-03-05  
楼主讲述的很不错.很容易懂..谢谢..辛苦了
2 楼 scuhao 2007-03-05  
复杂问题简单化,通俗易懂,谢谢楼主!
1 楼 jamesby 2007-03-04  
建议楼主整理出一篇文章,包含常用的23种模式,最关键的是详细说明每一个模式的使用场景,碰到一种问题立刻能够知道我的这个问题可以用哪种模式可以实现,或者类似哪种模式.

相关推荐

    liferay-faces-bridge-impl-3.0.0-ga1.zip

    【标题】"liferay-faces-bridge-impl-3.0.0-ga1.zip" 涉及的是Liferay Faces Bridge项目的实现模块,版本为3.0.0 GA1。Liferay Faces是Liferay门户平台的一个扩展,它提供了一种在Java EE环境中集成和使用JSF(Java...

    pg194-axi-bridge-pcie-gen3.pdf

    AXI Bridge for PCI Express Gen3 Subsystem是一款专为FPGA设计的IP核,它提供了连接PCI Express(PCIe)Gen3接口与系统内部高级可扩展接口(AXI)总线的桥梁。该产品指南(PG194 v3.0)详细介绍了这款IP核的功能、...

    PyPI 官网下载 | django-react-bridge-0.2.0.tar.gz

    **PyPI 官网下载 | django-react-bridge-0.2.0.tar.gz** 这个压缩包文件`django-react-bridge-0.2.0.tar.gz`来源于Python的官方软件仓库PyPI(Python Package Index),它包含了一个名为`django-react-bridge`的...

    设计模式C++学习之桥梁模式(Bridge)

    **桥梁模式(Bridge)**是一种结构型设计模式,它的主要目的是将抽象部分与其实现部分解耦,使得它们可以独立地进行变化。在C++编程中,这种模式尤其有用,因为它允许我们创建灵活且可扩展的系统,同时保持代码的低...

    java设计模式---诙谐易懂版

    代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式...桥梁模式(Bridge Pattern)、命令模式(Command Pattern)、装饰模式(Decorator Pattern)、迭代器模式(Iterator Pattern)、组合模式...

    设计模式之桥梁模式实现

    桥梁模式(Bridge Pattern)是设计模式中的一种结构型模式,它的核心思想是将抽象部分与实现部分分离,使得它们可以独立地进行变化。在这个主题中,我们将深入探讨桥梁模式的原理、结构以及如何在Java中实现。 首先...

    设计模式之桥梁模式

    **桥梁模式(Bridge Pattern)详解** 桥梁模式是一种结构型设计模式,它将抽象部分与实现部分分离,使得它们可以独立地进行变化。这种模式的主要目的是为了将抽象化和实现化解耦,使得两者可以独立发展,增加了系统...

    桥梁模式实例

    桥梁模式是一种设计模式,它是结构型模式的一种,其主要目的是将抽象部分与实现部分分离,使得它们可以独立地进行变化。在Java中实现桥梁模式,我们可以有效地解耦系统中的类,提高代码的可扩展性和可维护性。 首先...

    Laravel开发-doctrine2bridge-l5

    总的来说,`Laravel-development-doctrine2bridge-l5` 是 Laravel 与 Doctrine2 之间的桥梁,旨在让 Laravel 开发者能够充分利用 Doctrine2 的强大功能,同时保留 Laravel 的便利性和生态系统。通过这个项目,开发者...

    PCI-to-PCI Bridge Architecture Specification

    PCI-to-PCI Bridge则是连接两个或多个PCI总线的桥梁,使得它们可以共享资源,扩大系统带宽,同时解决了主PCI总线负载过重的问题。 PCI-to-PCI Bridge的核心功能包括地址翻译、数据传输控制和配置空间管理。地址翻译...

    (结构型模式)Bridge模式

    Bridge模式通过引入一个抽象接口作为桥梁,使得抽象类与其实现类能够解耦,提供更大的灵活性。 在软件开发中,随着系统的复杂性增加,抽象类和它的实现类可能会变得越来越庞大,导致代码难以维护。Bridge模式通过将...

    JavaBridge.jar,php-script.jar,php-servlet.jar,script-api.jar

    1. **JavaBridge.jar**: 这个文件提供了Java和PHP之间的桥梁,它实现了PHP语言的调用Java API的能力。JavaBridge使得PHP能够直接调用Java类库,扩展了PHP的功能,比如访问Java的数据库连接池、企业级服务等。它通过...

    Bridge模式

    在Bridge模式中,抽象类(Abstract Class)和实现类(Implementor Class)是两个独立的继承体系,通过一个“桥梁”类(Bridge Class)进行连接,使得抽象部分可以动态地更换不同的实现部分,实现部分也可以独立地...

    java 设计模式-个人总结

    桥梁模式 (Bridge) - **定义**:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 - **应用场景**:当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时。 - **优点**:提高系统的可扩展性,让...

    学习php设计模式 php实现桥梁模式(bridge)

    【PHP设计模式】桥梁模式(Bridge Pattern)是一种结构型设计模式,它的主要目的是将抽象部分与其实现部分解耦,使两者能够独立地进行变化。在PHP中,桥梁模式可以帮助我们构建更灵活、可扩展的系统,降低组件间的...

    JAVA常用设计模式-追美眉技术详解.doc

    桥梁模式 (Bridge)** - **定义**: 将抽象部分与它的实现部分分离,使它们都可以独立变化。 - **应用场景**: 当一个类存在两个独立变化的维度时。 - **优缺点**: 优点是实现了接口与实现分离,提高了系统的扩展...

    02-Bridge.rar

    "Bridge"设计模式,正如我们从标题和描述中的"02-Bridge.rar"所暗示的那样,是面向对象设计中的一种结构型模式,它旨在减少类的耦合度,使抽象部分与实现部分能够独立变化。 桥接模式的核心思想是将抽象部分和实现...

    桥梁模式DEMO

    1. **模式定义**:桥梁模式(Bridge Pattern)是一种行为设计模式,它将抽象部分与实现部分分离,使得它们可以独立地进行变化。这种模式的主要目标是将抽象部分和实现部分解耦,这样即使两部分都需要改变,也可以...

Global site tag (gtag.js) - Google Analytics