`

桥梁模式

 
阅读更多
桥梁模式的用意是将问题的抽象和实现分离开来实现,通过用聚合代替继承来解决子类爆炸性增长的问题。
比如我们有一个画图程序 有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
所以说是这是一种简化了的桥梁
分享到:
评论

相关推荐

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

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

    设计模式之桥梁模式

    桥梁模式你值得拥有,简单实用易上手,不能错过的实例。

    设计模式之桥梁模式实现

    设计模式之桥梁模式的Java版本实现和UML类图

    桥梁模式实例

    java实现桥梁模式

    JAVA桥梁模式.docx

    桥梁模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”。

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

    一、桥梁模式结构图   二、桥梁模式中主要角色 抽象化(Abstraction)角色:定义抽象类的接口并保存一个对实现化对象的引用。 修正抽象化(Refined Abstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义...

    JavaScript设计模式–桥梁模式引入操作实例分析

    本文实例讲述了JavaScript设计模式–桥梁模式引入操作。分享给大家供大家参考,具体如下: 1.使用情况 (1)事件的监控 #1,利用页面的button来选择宠物的例子(思路) button.addEvent(element,"click",...

    桥梁模式的结构与示意性源代码.doc

    桥梁模式的结构与示意性源代码.doc

    GOF中桥梁模式的java实现,及说明.pdf

    GOF中桥梁模式的java实现,及说明.pdf

    java设计模式

    33.1.2 桥梁模式实现邮件发送 33.1.3 最佳实践 33.2 门面模式VS中介者模式 33.2.1 中介者模式实现工资计算 33.2.2 门面模式实现工资计算 33.2.3 最佳实践 33.3 包装模式群PK 33.3.1 代理模式 33.3.2 装饰模式 33.3.3...

    JavaScript设计模式--桥梁模式引入操作实例分析

    主要介绍了JavaScript设计模式--桥梁模式,结合实例形式分析了JavaScript设计模式中桥梁模式应用操作技巧与注意事项,需要的朋友可以参考下

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    11、桥梁模式BRIDGE PATTERN 12、命令模式COMMAND PATTERN 13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、...

    24种设计模式与6大设计原则

    桥梁模式 命令模式 装饰模式 迭代器模式 组合模式 观察者模式 责任链模式 访问者模式 状态模式 原型模式 中介者棋式 解释器模式 亨元模式 备忘录模式 模式大PK 六大设计原则:单一职责原则,里氏替换原则,依赖倒置...

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

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

    浅析23种软件设计模式

    7. 桥梁模式:桥梁模式的主要思想是将抽象化与实现化脱耦,使得二者可以独立的变化。这种模式的优点是可以使系统更加灵活和可扩展,但缺点是增加了系统的复杂度。 8. 合成模式:合成模式的主要思想是将对象组织到树...

    C#设计模式.PDF

    六、 在什么情况下应当使用桥梁模式 158 设计模式(17)-Chain of Responsibility Pattern 158 一、 职责链(Chain of Responsibility)模式 160 二、 责任链模式的结构 160 三、 责任链模式的示意性源代码 160 四...

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

    设计模式实例,java语言开发。 包括:工厂模式,观察者模式,装饰模式和桥梁模式。

    基于设计模式的画图程序

    至少在其中运用 3 种模式,其中涉及到的模式有装饰模式、策略模式、桥梁模式三种。 1.2 画图基本要求 能实现基本图形的绘制功能 1.3 画图高级要求 实现图形的操作(如选取、移动、放大、缩小、改变颜色、改变线形等...

    C#设计模式大全

    六、 在什么情况下应当使用桥梁模式 设计模式(17)-Chain of Responsibility Pattern 一、 职责链(Chain of Responsibility)模式 二、 责任链模式的结构 三、 责任链模式的示意性源代码 四、 纯的与不纯的...

Global site tag (gtag.js) - Google Analytics