C++設(shè)計(jì)模式之Proxy模式(代理模式)詳解
代理模式很容易理解,就是代替別人去做某一件事,打個(gè)比方,我們需要買水果,一般是去超市或者水果店買水果,很少有人去果園買水果,果園是生產(chǎn)水果的地方,但很少出售水果,在這里,水果店,超市就成了代理。
首先定義一個(gè)抽象類,提供所有的函數(shù)接口。
1.定義賣水果的抽象類,也就是接口,果園與超市都要繼承這個(gè)類。
#pragma once class CSellFruits//定義一個(gè)抽象類 { public: CSellFruits(void); virtual ~CSellFruits(void); virtual void sellapple()=0; //定義接口,賣蘋果 virtual void sellorange()=0;//定義接口,賣橘子 }; #include "SellFruits.h" CSellFruits::CSellFruits(void) { } CSellFruits::~CSellFruits(void) { }
2.定義具體類,也就是果園類,果園生產(chǎn)水果,但是一般不買水果
#pragma once #include "sellfruits.h" #include <stdio.h> class COrchard : public CSellFruits { public: COrchard(void); virtual ~COrchard(void); virtual void sellapple(); virtual void sellorange(); }; #include "Orchard.h" COrchard::COrchard(void) { } COrchard::~COrchard(void) { } void COrchard::sellapple() { printf("Sell apple\n"); } void COrchard::sellorange() { printf("Sell orange\n"); }
3.定義代理類,代理賣水果的類
#pragma once #include "sellfruits.h" #include "Orchard.h" #include <stdio.h> class CProcySellFruits : public CSellFruits { public: CProcySellFruits(void); virtual ~CProcySellFruits(void); virtual void sellapple(); virtual void sellorange(); private: CSellFruits *p_SellFruits; //傳入接口對象 }; #include "ProcySellFruits.h" CProcySellFruits::CProcySellFruits(void):p_SellFruits(NULL) { } CProcySellFruits::~CProcySellFruits(void) { } void CProcySellFruits::sellapple() { if(this->p_SellFruits==NULL) { this->p_SellFruits=new COrchard(); //用被代理的類實(shí)例化 } this->p_SellFruits->sellapple();//代理果園賣蘋果 } void CProcySellFruits::sellorange() { if(this->p_SellFruits==NULL) { this->p_SellFruits=new COrchard(); //用被代理的類實(shí)例化 } this->p_SellFruits->sellorange();//代理果園賣橘子 }
4.實(shí)際調(diào)用
CProxySellFruits* p=new CProxySellFruits(); //用代理類賣水果 p->SellApple(); p->SellOrange();
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++中范圍(Ranges)與視圖(Views)的常見問題、易錯(cuò)點(diǎn)
ranges和views是C20引入的重要特性,它們讓代碼更加簡潔、高效且富有表達(dá)力,通過理解其基本概念、注意常見的陷阱,并合理應(yīng)用高級技巧,開發(fā)者可以充分利用這些新特性,提升軟件質(zhì)量和開發(fā)效率,,本文將深入淺出地探討ranges與views的基礎(chǔ)概念、常見問題、易錯(cuò)點(diǎn)及避免策略2024-06-06C++使用map實(shí)現(xiàn)多進(jìn)程拷貝文件的程序思路
這篇文章主要介紹了C++使用mmap實(shí)現(xiàn)多進(jìn)程拷貝文件,通過本文給大家分享程序思路及完整代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12使用C++ Matlab中的lp2lp函數(shù)教程詳解
本文介紹如何使用C++編寫數(shù)字濾波器設(shè)計(jì)算法,實(shí)現(xiàn)Matlab中的lp2lp函數(shù),將低通濾波器轉(zhuǎn)換為參數(shù)化的低通濾波器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-04-04基于Windows C++ 應(yīng)用程序通用日志組件的使用詳解
眾所周知,在調(diào)試、跟蹤和執(zhí)行應(yīng)用程序的過程中,程序的日志能為這些工作提供大量有價(jià)值的運(yùn)行信息。因此,程序的日志對應(yīng)用程序的運(yùn)行、維護(hù)至關(guān)重要2013-05-05