您的位置:首页 > 编程语言 > C语言/C++

设计模式C++学习笔记之十一(Bridge桥梁模式)

2016-03-17 22:48 766 查看
博文很精彩,为方便个人学习特转载,地址:http://www.cnblogs.com/wanggary/archive/2011/04/17/2019067.html

桥梁模式,将抽象部分与它的实现部分分离,使它们都可以独立地变化。实现分离的办法就是增加一个类,


11.1.解释

main(),客户

IProduct,产品接口

CHouse,房子

CIPod,ipod

CClothes,服装

CNewCorp,桥梁类,MakeMoney()是桥梁方法

CNewHouseCorp,只能生产房子,所以构造函数是CHouse*

CShanZhaiCorp,什么赚钱就生产什么,所以构造函数是IProduct*

说明:客户直接使用CNewHouseCorp和CShanZhaiCorp类,在main()函数里构造产品,然后传到这两个类里。这两个类的MakeMoney()函数,先调用基类的MakeMoney(),然后分别执行各自的逻辑。

注意:CNewCorp起到了桥梁的作用。可以分别增加产品和公司。

看代码:

//NewCorp.h

#pragma once

#include "IProduct.h"

class CNewCorp

{

public:

    CNewCorp(IProduct *pproduct);

    virtual ~CNewCorp(void);

    void MakeMoney();

private:

    IProduct *m_pProduct;

};

//NewCorp.cpp

#include "StdAfx.h"

#include "NewCorp.h"

CNewCorp::CNewCorp( IProduct *pproduct )

{

    this->m_pProduct = pproduct;

}

CNewCorp::~CNewCorp(void)

{

}

void CNewCorp::MakeMoney()

{

    //每个公司都是一样,先生产

    this->m_pProduct->BeProducted();

    //然后销售

    this->m_pProduct->BeSelled();

}

//NewHouseCorp.h

#pragma once

#include "newcorp.h"

#include "House.h"

class CNewHouseCorp :

    public CNewCorp

{

public:

    CNewHouseCorp(CHouse *pHouse);

    ~CNewHouseCorp(void);

    void MakeMoney();

};

//NewHouseCorp.cpp

#include "StdAfx.h"

#include "NewHouseCorp.h"

#include <iostream>

using std::cout;

using std::endl;

CNewHouseCorp::CNewHouseCorp(CHouse *pHouse) : CNewCorp(pHouse)

{

}

CNewHouseCorp::~CNewHouseCorp(void)

{

}

void CNewHouseCorp::MakeMoney()

{

    this->CNewCorp::MakeMoney();

    cout << "房地产公司赚大钱了..." << endl;

}

//ShanZhaiCorp.h

#pragma once

#include "newcorp.h"

#include "IProduct.h"

class CShanZhaiCorp :

    public CNewCorp

{

public:

    CShanZhaiCorp(IProduct *pproduct);

    ~CShanZhaiCorp(void);

    void MakeMoney();

};

//ShanZhaiCorp.cpp

#include "StdAfx.h"

#include "ShanZhaiCorp.h"

#include <iostream>

using std::cout;

using std::endl;

CShanZhaiCorp::CShanZhaiCorp(IProduct *pproduct) : CNewCorp(pproduct)

{

}

CShanZhaiCorp::~CShanZhaiCorp(void)

{

}

void CShanZhaiCorp::MakeMoney()

{

    this->CNewCorp::MakeMoney();

    cout << "我赚钱呀..." << endl;

}

//IProduct.h

#pragma once

class IProduct

{

public:

    IProduct(void)

    {

    }

    virtual ~IProduct(void)

    {

    }

    virtual void BeProducted() = 0;

    virtual void BeSelled() = 0;

};

//House.h

#pragma once

#include "iproduct.h"

class CHouse :

    public IProduct

{

public:

    CHouse(void);

    ~CHouse(void);

    void BeProducted();

    void BeSelled();

};

//House.cpp

#include "StdAfx.h"

#include "House.h"

#include <iostream>

using std::cout;

using std::endl;

CHouse::CHouse(void)

{

}

CHouse::~CHouse(void)

{

}

void CHouse::BeProducted()

{

    cout << "生产出的房子是这个样子的..." << endl;

}

void CHouse::BeSelled()

{

    cout << "生产出的房子卖出去了..." << endl;

}

//Clothes.h

#pragma once

#include "iproduct.h"

class CClothes :

    public IProduct

{

public:

    CClothes(void);

    ~CClothes(void);

    void BeProducted();

    void BeSelled();

};

//Clothes.cpp

#include "StdAfx.h"

#include "Clothes.h"

#include <iostream>

using std::cout;

using std::endl;

CClothes::CClothes(void)

{

}

CClothes::~CClothes(void)

{

}

void CClothes::BeProducted()

{

    cout << "生产出的衣服是这个样子的..." << endl;

}

void CClothes::BeSelled()

{

    cout << "生产出的衣服卖出去了..." << endl;

}

//IPod.h

#pragma once

#include "iproduct.h"

class CIPod :

    public IProduct

{

public:

    CIPod(void);

    ~CIPod(void);

    void BeProducted();

    void BeSelled();

};

//IPod.cpp

#include "StdAfx.h"

#include "IPod.h"

#include <iostream>

using std::cout;

using std::endl;

CIPod::CIPod(void)

{

}

CIPod::~CIPod(void)

{

}

void CIPod::BeProducted()

{

    cout << "生产出的ipod是这个样子的..." << endl;

}

void CIPod::BeSelled()

{

    cout << "生产出的ipod卖出去了..." << endl;

}

//

// Bridge.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include "ClothesCorp.h"

#include "NewHouseCorp.h"

#include "Clothes.h"

#include "IPod.h"

#include "ShanZhaiCorp.h"

#include <iostream>

using std::cout;

using std::endl;

void DoNewRun1()

{

    cout << "----------房地产公司是这样运行的----------" << endl;

    CHouse house;

    CNewHouseCorp newHouseCorp(&house);

    newHouseCorp.MakeMoney();

    cout << endl;

    cout << "----------山寨公司是这样运行的----------" << endl;

    CClothes clothes;

    CShanZhaiCorp shanZhaiCorp(&clothes);

    shanZhaiCorp.MakeMoney();

    cout << endl;

}

void DoNewRun2()

{

    cout << "----------房地产公司是这样运行的----------" << endl;

    CHouse house;

    CNewHouseCorp newHouseCorp(&house);

    newHouseCorp.MakeMoney();

    cout << endl;

    cout << "----------山寨公司是这样运行的----------" << endl;

    CIPod ipod;

    CShanZhaiCorp shanZhaiCorp(&ipod);

    shanZhaiCorp.MakeMoney();

    cout << endl;

}

int _tmain(int argc, _TCHAR* argv[])

{

    //只有两家公司,一家是房地产公司,另一家公司是衣服赚钱就生产衣服

    DoNewRun1();

    //只有两家公司,一家是房地产公司,另一家公司是ipod赚钱就生产ipod

    DoNewRun2();

    _CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF);

    _CrtDumpMemoryLeaks();

    return 0;

}



桥梁模式(又可以称做桥接模式)属于结构型模式。CNewCorp实现了桥梁(桥接)的作用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式