• 设计模式4——桥接模式


    当物体有几种不同的属性时,这时类的继承就会变的多样。

    例如,一款手机按类型可分为功能机和智能机,按颜色可分为黑色、白色、红色等,按品牌可分为苹果、三星、小米等。

    当属性越多,则需要创建的类就更多,使用桥接模式能够大大降低问题的复杂性,并且能够极大程度降低耦合。

    示例代码:

    Bridge.h内容

     1 #ifndef Bridge_H_H
     2 #define Bridge_H_H
     3 
     4 #include <iostream>
     5 using namespace std;
     6 
     7 class Color
     8 {
     9 public:
    10     Color() {}
    11     virtual ~Color() {}
    12     virtual void display() = 0;
    13 };
    14 
    15 class ColorWhite : public Color
    16 {
    17 public:
    18     virtual void display() { cout << "Color is White!" << endl; }
    19 };
    20 
    21 class ColorBlack : public Color
    22 {
    23 public:
    24     virtual void display() { cout << "Color is Black!" << endl; };
    25 };
    26 
    27 class Phone
    28 {
    29 public:
    30     Phone() : color(NULL) {}
    31     virtual ~Phone() {}
    32     virtual void display() { color->display(); }
    33     void setColor(Color *color0){
    34         color = color0;
    35     }
    36 private:
    37     Color *color;
    38 };
    39 
    40 class FunctionalPhone : public Phone
    41 {
    42 public:
    43     virtual void display(){
    44         cout << "Type is Functional! ";
    45         Phone::display();
    46     }
    47 };
    48 
    49 class IntelligentPhone : public Phone
    50 {
    51 public:
    52     virtual void display(){
    53         cout << "Type is Intelligient! ";
    54         Phone::display();
    55     }
    56 };
    57 
    58 void BridgeTest()
    59 {
    60     Color *color1 = new ColorWhite();
    61     Color *color2 = new ColorBlack();
    62 
    63     Phone *phone1 = new FunctionalPhone();
    64     Phone *phone2 = new IntelligentPhone();
    65 
    66     phone1->setColor(color1);
    67     phone1->display();
    68     phone1->setColor(color2);
    69     phone1->display();
    70 
    71     phone2->setColor(color1);
    72     phone2->display();
    73     phone2->setColor(color2);
    74     phone2->display();
    75 }
    76 
    77 #endif

    运行结果:

    所设计的颜色和类型分别只有两个,优势体现不明显,当每种类型继承较多时,优势将会很明显。

    假如类型和颜色分别有5种和7种,则5+7比5*7要小很多,结构也会更加清晰。

  • 相关阅读:
    详细对比9门主流编程语言
    ZT在谷歌上班感受如何?
    林锐:5 C++/C程序的基本概念
    林锐书:写一个hello world by seasoned professional
    C 中重载一词中的“重”字读ZHONG4还是CHONG2?
    ZT C++ 重载、覆盖和隐藏的区别
    安全模式 冷启动
    Wi-Fi
    再谈男性饮食保健
    fstat、stat和lstat 区别(转)
  • 原文地址:https://www.cnblogs.com/MiniHouse/p/3974689.html
Copyright © 2020-2023  润新知