• 设计模式之bridge模式


    写在之前:设计模式的意义是解决 实际的设计问题,之所以不好理解是因为没有亲身的经历,所以要不停的学习实践思考。

    bridge翻译为桥接。 既然为桥接 则一定有桥接的两个对象。本文打算从三个方面来分析桥接模式。

    1.桥接的两个对象是什么? 2.怎么样进行桥接 3.为什么要使用桥接模式。

    1.桥接的两个对象是什么?

    首先看桥接模式的定义:将一个类的抽象部分与实现部分分离,使它们都可以独立的变化。从这句话中科一粗略的知道桥接的对象

    :一个类的抽象部分和实现部分。

    2.为什么要进行桥接:

    首先看一下设计模式书中给出的桥接模式的uml图。

    Client同过调用Abstraction中的Operation方法,实现Client想要的功能。其中,具体的Operation实现由Implementor(其子类负责具体实现)来实现,Operation通过组合的方式来完成对Implementor的调用(一般通过工厂模式获得Implementor的实例,优先使用组合而不是继承~~)

    在实际的程序设计中,当一个类有多维的变化,我理解的多维的变化是指 抽象类中的方法有多种实现,在子类中不同的实现又构成了不同的子类。举个简单的栗子~

    人这个抽象类,里面有一个虚方法,virtual run () = 0;

    1 class person 
    2 {
    3     virtaul run () = 0;           
    4 }

    我们有男人,女人继承了persion类。并重写该run方法,但是有的人跑的快,有的人跑的慢,还有的人不会跑(特殊情况,比如婴儿~),这时候我们要

    有跑的快的女人,跑得快的男人,跑得慢的男人,跑得慢的女人时,就需要四个子类(分别继承男人和女人)。这时候如果来了一个中性人,程序员砸了键盘,拿起鼠标开始复制粘贴T_T。

    这时候,桥接模式就显现出威力了。定义一个类叫runImplementor 具体实现如下:

     1 class RunImplementor
     2 {
     3      virtual void run() = 0;
     4 }
     5 
     6 
     7 class SlowrunImplementor :public runImplementor
     8 {
     9      virtual void run()
    10         {
    11           // slow run 
    12         }
    13 }    
    14 
    15 
    16 class FastrunImplementor :public runImplementor
    17 {
    18      virtual void run()
    19         {
    20           // fast run 
    21         }
    22 } 

    这时,想要一个跑的快的女人时,person *womanFast = new person("fast"); womanFast->getrunImplementor().run();
    最后,为什么要使用桥接模式:
    由上面的栗子可以看出,桥接模式将类的实现和抽象分离,在进行扩展时,方便分开进行扩展,在高一层级进行耦合,减少了代码的冗余。

    补充: 看了大话设计模式,又对比设计模式一书后,个人理解的桥接模式使用的场景为, 当一个系统有多维的变化空间时,如上面举得例子,人分为男人,女人,中性人,
    人有跑的方法,跑的有快又慢有不跑的, 所以通过桥接模式,将人的抽象与跑的实现分离开来,在人与跑之前架起一座桥。来减少彼此之间的耦合。
    ~~~~~
  • 相关阅读:
    在安卓上用Termux安装sqlmap
    地址转换函数
    字节操作函数
    主机字节序和网络字节序
    20191231 Spring官方文档(Core 1.13-1.14)
    20191230 Spring官方文档(Core 1.12)
    20191230 Tomcat权威指南-读书摘要系列【归档】
    20191230 On Java8【归档】
    20191227 Java8 日期时间API
    20191226 Spring官方文档(Core 1.11)
  • 原文地址:https://www.cnblogs.com/missmzt/p/4681505.html
Copyright © 2020-2023  润新知