zoukankan      html  css  js  c++  java
  • 桥接模式与其它几种相近的设计模式之间的区别与比较

      • 完整版地址: http://chjavach.iteye.com/blog/756233
      • 桥接模式和策略模式
            这两个模式有很大的相似之处。
            如果把桥接模式的抽象部分简化来看,如果暂时不去扩展Abstraction,也就是去掉RefinedAbstraction。桥接模式简化过后的结构图参见图13。再看策略模式的结构图参见图17.1。会发现,这个时候它们的结构都类似如图18所示:


                                        图18  桥接模式和策略模式结构示意图
            通过上面的结构图,可以体会到桥接模式和策略模式是如此相似。可以把策略模式的Context视做是使用接口的对象,而Strategy就是某个接口了,具体的策略实现那就相当于接口的具体实现。这样看来的话,某些情况下,可以使用桥接模式来模拟实现策略模式的功能。
            这两个模式虽然相似,也还是有区别的。最主要的是模式的目的不一样,策略模式的目的是封装一系列的算法,使得这些算法可以相互替换;而桥接模式的目的是分离抽象和实现部分,使得它们可以独立的变化。
      • 桥接模式和状态模式
            由于从模式结构上看,状态模式和策略模式是一样的,这两个模式的关系也基本上类似于桥接模式和策略模式的关系。
            只不过状态模式的目的是封装状态对应的行为,并在内部状态改变的时候改变对象的行为。
      • 桥接模式和模板方法模式
            这两个模式有相似之处。
            虽然标准的模板方法模式是采用继承来实现的,但是模板方法也可以通过回调接口的方式来实现,如果把接口的实现独立出去,那就类似于模板方法通过接口去调用具体的实现方法了。这样的结构就和简化的桥接模式类似了。
            可以使用桥接模式来模拟实现模板方法模式的功能。如果在实现Abstraction对象的时候,在里面定义方法,方法里面就是某个固定的算法骨架,也就是说这个方法就相当于模板方法。在模板方法模式里,是把不能确定实现的步骤延迟到子类去实现;现在在桥接模式里面,把不能确定实现的步骤委托给具体实现部分去完成,通过回调实现部分的接口,来完成算法骨架中的某些步骤。这样一来,就可以实现使用桥接模式来模拟实现模板方法模式的功能了。
            使用桥接模式来模拟实现模板方法模式的功能,还有个潜在的好处,就是模板方法也可以很方便的扩展和变化了。在标准的模板方法里面,一个问题就是当模板发生变化的时候,所有的子类都要变化,非常不方便。而使用桥接模式来实现类似的功能,就没有这个问题了。
            另外,这里只是说从实现具体的业务功能上,桥接模式可以模拟实现出模板方法模式能实现的功能,并不是说桥接模式和模板方法模式就变成一样的,或者是桥接模式就可以替换掉模板方法模式了。要注意它们本身的功能、目的、本质思想都是不一样的。
      • 桥接模式和抽象工厂模式
            这两个模式可以组合使用。
            桥接模式中,抽象部分需要获取相应的实现部分的接口对象,那么谁来创建实现部分的具体实现对象呢?这就是抽象工厂模式派上用场的地方。也就是使用抽象工厂模式来创建和配置一个特定的具体实现的对象。
            事实上,抽象工厂主要是用来创建一系列对象的,如果创建的对象很少,或者是很简单,还可以采用简单工厂,可以达到一样的效果,但是会比抽象工厂来得简单。
      • 桥接模式和适配器模式
            这两个模式可以组合使用。
            这两个模式功能是完全不一样的,适配器模式的功能主要是用来帮助无关的类协同工作,重点在解决原本由于接口不兼容而不能一起工作的那些类,使得它们可以一起工作。而桥接模式则重点在分离抽象和实现部分。
            所以在使用上,通常在系统设计完成过后,才会考虑使用适配器模式;而桥接模式,是在系统开始的时候就要考虑使用。
            虽然功能上不一样,这两个模式还是可以组合使用的,比如:已有实现部分的接口,但是有些不太适应现在新的功能对接口的需要,完全抛弃吧,有些功能还用得上,该怎么办呢?那就使用适配器来进行适配,使得旧的接口能够适应新的功能的需要。

    转载于:https://blog.csdn.net/sjtu_huang/article/details/6669722

  • 相关阅读:
    windows 下搭建apache php mysql p…
    PHP VC9和VC6以及Thread Safe和Non…
    mysql数据库插入中文时出现ERROR 1…
    phpmyadmin 配置
    Linux系统安装时分区的选择【转】
    汉字 Unicode 编码范围
    Linux 程序后台运行
    添加用户username到sudo组
    nautilus
    记录一下自己的.tmux.conf,.vimrc
  • 原文地址:https://www.cnblogs.com/it-deepinmind/p/13219571.html
Copyright © 2011-2022 走看看