• 桥接模式


    一、概述

    1、桥接模式将抽象部分与它的实现部分分离,使它们都可以独立的变化。

    2、在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,桥接模式把这种多维度分离出来,让他们独立变化,减少之间的耦合。

    感觉桥接模式的结构有点像抽象工厂模式,但桥接模式属于结构型模式,而抽象工厂模式属于创建型模式。

    3、UML

    4、所属类别:结构型

    二、C++程序

    和抽象工厂中的例子保持一致,这里还以linux、windows系统、手机、电脑为例

     1 // 桥接模式.cpp : 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 #include<iostream>
     6 using namespace std;
     7 class Ruanjian
     8 {
     9 public:
    10     Ruanjian(){}
    11     ~Ruanjian(){}
    12      virtual void OS()=0;
    13 };
    14 class Linux :public Ruanjian
    15 {
    16 public:
    17     Linux(){}
    18     virtual ~Linux(){}
    19     virtual void OS()
    20     {
    21         cout<<"我运行的是Linux系统"<<endl;
    22     }
    23 };
    24 class Windows :public Ruanjian
    25 {
    26 public:
    27     Windows(){}
    28     virtual ~Windows(){}
    29     virtual void OS()
    30     {
    31         cout<<"我运行的是Windows系统"<<endl;
    32     }
    33 };
    34 class Yingjian
    35 {
    36 public:
    37     Yingjian(){}
    38     virtual ~Yingjian(){}
    39     virtual void run()=0;
    40 };
    41 class PC:public Yingjian
    42 {
    43 private:
    44     Ruanjian * software;
    45 public:
    46     PC(Ruanjian* r)
    47     {
    48         software=r;
    49     }
    50     virtual ~PC(){}
    51     virtual void run()
    52     {
    53         cout<<"我是一个PC";
    54         software->OS();
    55     }
    56 };
    57 class Phone:public Yingjian
    58 {
    59 private:
    60     Ruanjian * software;
    61 public:
    62     Phone(Ruanjian* r)
    63     {
    64         software=r;
    65     }
    66     virtual ~Phone(){}
    67     virtual void run()
    68     {
    69         cout<<"我是一个Phone";
    70         software->OS();
    71     }
    72 };
    73 
    74 int _tmain(int argc, _TCHAR* argv[])
    75 {
    76     Linux* l=new Linux();
    77     Phone *p=new Phone(l);
    78     p->run();
    79     return 0;
    80 }
  • 相关阅读:
    Java中RuntimeException和Exception
    RuntimeException和Exception的区别
    Spring事务异常回滚
    iOS 卖票中多线程分析;
    凝视转换(部分)
    HDU 5386 Cover(模拟)
    iOS开发之软键盘使用小技巧
    【每日算法】高速幂
    CKEditor高级编辑器
    iOS开发 剖析网易新闻标签栏视图切换(addChildViewController属性介绍)
  • 原文地址:https://www.cnblogs.com/bewolf/p/4252854.html
Copyright © 2020-2023  润新知