设计模式-结构型-桥接

来源:互联网 发布:笔记本网络初始化失败 编辑:程序博客网 时间:2024/05/23 19:10
#pragma once#ifndef BRIDEG_H #define BRIDEG_H class Implementor; // 维护一个Implementor 类的指针 class Abstraction { public: Abstraction(Implementor* pImplementor); virtual ~Abstraction(); void Operation(); protected: Implementor* m_pImplementor; }; // 为实现Abstraction 定义的抽象基类,定义了实现的接口函数 class Implementor { public: Implementor(){} virtual ~Implementor(){} virtual void OperationImpl() = 0; }; // 继承自Implementor,是Implementor 的不同实现之一 class ConcreateImplementorA : public Implementor { public: ConcreateImplementorA(){} virtual ~ConcreateImplementorA(){} virtual void OperationImpl(); }; // 继承自Implementor,是Implementor 的不同实现之一 class ConcreateImplementorB : public Implementor { public: ConcreateImplementorB(){} virtual ~ConcreateImplementorB(){} virtual void OperationImpl(); }; #endif 

#include "StdAfx.h"#include "bridge_impl.h"#include "bridge_impl.h" #include <iostream> void ConcreateImplementorA::OperationImpl() { std::cout << "Implementation by ConcreateImplementorA\n"; } void ConcreateImplementorB::OperationImpl() { std::cout << "Implementation by ConcreateImplementorB\n"; } Abstraction::Abstraction(Implementor* pImplementor) : m_pImplementor(pImplementor) { } Abstraction::~Abstraction() { delete m_pImplementor; m_pImplementor = NULL; } void Abstraction::Operation() { m_pImplementor->OperationImpl(); } 

// Bridge.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "bridge_impl.h"#include <stdlib.h>#include <stdio.h>//将抽象部分与它的实现部分分离,使它们都可以独立地变化int _tmain(int argc, _TCHAR* argv[]){/************************************************************************//* media_link::create_link(link_type) (提供抽象接口)-->                 *//* --> media_link_impl::create_link(new tcp,new udp,new rtsp) (传入不同对象指针)*//* --> tcp_link_impl::create_link,udp_link_impl::create_link,---        *//* --- rtsp_link_impl::create_link  (不同具体实现)                        *//************************************************************************/ConcreateImplementorA *pImplA = new ConcreateImplementorA(); Abstraction *pAbstraction1 = new Abstraction(pImplA); pAbstraction1->Operation();delete pAbstraction1; ConcreateImplementorB *pImplB = new ConcreateImplementorB(); Abstraction *pAbstraction2 = new Abstraction(pImplB); pAbstraction2->Operation(); delete pAbstraction2; system("pause"); return 0;}

原创粉丝点击