c++橋接模式

來源:互聯網
上載者:User

標籤:close   define   rac   發展   color   標準   open   new   csdn   

可以簡記為pointer to implement:”指向實現的指標”。

 [DP]書上定義:將抽象部分與它的實現部分分離,使它們都可以獨立地變化。考慮裝作業系統,有多種配置的電腦,同樣也有多款作業系統。如何運用橋接模式呢?可以將作業系統和電腦分別抽象出來,讓它們各自發展,減少它們的耦合度。當然了,兩者之間有標準的介面。這樣設計,不論是對於電腦,還是作業系統都是非常有利的。下面給出這種設計的UML圖,其實就是橋接模式的UML圖。

 

#include <bits/stdc++.h>using namespace std;#define debug(x) cout << #x << " at line " << __LINE__ << " is: " << x << endlclass COS{public:    COS() {cout << "OS()" << endl;}    virtual ~COS() {cout << "~OS()" << endl;}    virtual void Run(){}};class CLinuxOS : public COS{public:    CLinuxOS() {cout << "CLinuxOS()" << endl;}    ~CLinuxOS() {cout << "~CLinuxOS()" << endl;}    void Run(){cout << "LinuxOS run()" << endl;}};class CUnixOS : public COS{public:    CUnixOS() {cout << "CUnixOS()" << endl;}    ~CUnixOS() {cout << "~CUnixOS()" << endl;}    void Run(){cout << "CUnixOS run()" << endl;}};class CComputer{public:    CComputer() {cout << "CComputer()" << endl;}    virtual ~CComputer() {cout << "~CComputer()" << endl;}    virtual void InstallOS(COS *os){}};class CIBMComputer : public CComputer{public:    CIBMComputer() {cout << "CIBMComputer()" << endl;}    ~CIBMComputer() {cout << "~CIBMComputer()" << endl;}    void InstallOS(COS *os){ os->Run();}};class CHPComputer : public CComputer{public:    CHPComputer() {cout << "CHPComputer()" << endl;}    ~CHPComputer() {cout << "~CHPComputer()" << endl;}    void InstallOS(COS *os){ os->Run();}};int main(int argc, char *argv[]){    COS *os = new CLinuxOS();    CComputer *cmptr = new CIBMComputer();    cmptr->InstallOS(os);    delete cmptr;    cmptr = NULL;    delete os;    os = NULL;    return 0;}

 

 

第二個樣本:

#ifndef SOLUTION_H#define SOLUTION_Hstruct CImplement;class CAbstractSample{public:    CAbstractSample();    virtual ~CAbstractSample();    void abstractDo();private:    CImplement *m_impl;};#endif // SOLUTION_H
solution.h

 

#include "solution.h"#include <iostream>using namespace std;struct CImplement{    void doSomething(){        cout << "CImplement doSomething()" << endl;    }};CAbstractSample::CAbstractSample():m_impl(new CImplement){    cout << "CAbstractSample()" << endl;}CAbstractSample::~CAbstractSample(){    if(m_impl != NULL)    {        delete m_impl;        m_impl = NULL;    }    cout << "~CAbstractSample()" << endl;}void CAbstractSample::abstractDo(){    m_impl->doSomething();}
solution.cpp
#include "solution.h"#include <iostream>using namespace std;struct CImplement{    void doSomething(){        cout << "CImplement doSomething()" << endl;    }};CAbstractSample::CAbstractSample():m_impl(new CImplement){    cout << "CAbstractSample()" << endl;}CAbstractSample::~CAbstractSample(){    if(m_impl != NULL)    {        delete m_impl;        m_impl = NULL;    }    cout << "~CAbstractSample()" << endl;}void CAbstractSample::abstractDo(){    m_impl->doSomething();}int main(int argc, char *argv[]){    CAbstractSample *as = new CAbstractSample();    as->abstractDo();    delete as;    as = NULL;    return 0;}

 

$ g++ -g -Wall -std=c++0x solution.cpp main.cpp -o xmain

c++橋接模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.