zoukankan      html  css  js  c++  java
  • 设计模式之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();
    最后,为什么要使用桥接模式:
    由上面的栗子可以看出,桥接模式将类的实现和抽象分离,在进行扩展时,方便分开进行扩展,在高一层级进行耦合,减少了代码的冗余。

    补充: 看了大话设计模式,又对比设计模式一书后,个人理解的桥接模式使用的场景为, 当一个系统有多维的变化空间时,如上面举得例子,人分为男人,女人,中性人,
    人有跑的方法,跑的有快又慢有不跑的, 所以通过桥接模式,将人的抽象与跑的实现分离开来,在人与跑之前架起一座桥。来减少彼此之间的耦合。
    ~~~~~
  • 相关阅读:
    界面控件DevExpress WPF入门 表达式编辑器功能
    Telerik UI for WPF全新版本——拥有Office2019高对比度主题
    DevExpress报表控件v21.2 全新的Visual Studio报表设计器
    报告生成器FastReport .NET入门指南 在Linux中启动应用程序
    文档控件DevExpress Office File API v21.2 自定义字体加载引擎
    UI组件库Kendo UI for Angular入门 如何开始使用图表功能
    WPF界面工具Telerik UI for WPF入门级教程 设置一个主题(二)
    DevExtreme初级入门教程(React篇) TypeScript支持
    报表开发利器FastReport .NET v2022.1 添加关键对象和属性
    python项目打包(一) setup.py、Python源代码项目结构
  • 原文地址:https://www.cnblogs.com/missmzt/p/4681505.html
Copyright © 2011-2022 走看看