設計模式-代理模式 C++實現

代理模式

定義:由於某些原因給某個對象提供一個代理以控制該對象的訪問。
特點:(1)代理模式再客戶端和目標對象之間起到一箇中介的作用和保護目標對象的作用。(2)代理對象可以擴展目標對象的功能。(3)代理模式能將客戶端和目標對象分離,一定程度上降低了系統的耦合度。
主要角色 Subject,ConcreteSubject,Proxy
具體應用的例子:比如你有一個生產玩偶的工廠,但你自己生產的不是很美觀,你可以交給一家代理商來做。代理商可以更好的完成生產。或者如A想追求B,但A不認識B,但C認識B,A可以通過C來向A表達愛意。
Subject.h
#pragma once
class Subject {
public:
	Subject();
	virtual void Request() = 0;//執行的任務
	~Subject();
};
ConcreteSubject.h
#pragma once
#include"Subject.h"
class ConcreteSubject :public Subject {
public:
	ConcreteSubject();
	~ConcreteSubject();
	void Request();
};
Proxy.h
#pragma once
#include"Subject.h"
class Proxy :public Subject {
public:
	Proxy(Subject* _sub);
	~Proxy();
	void Request();
	void pre();//生產前的準備
	void end();//生產後的工作
private:
	Subject* sub;
};
Subject.cpp
#include"Subject.h"
#include<iostream>
using namespace std;

Subject::Subject(){
	cout << "Subject" << endl;
}
Subject::~Subject(){
	cout << "~Subject" << endl;
}
ConcreteSubject.cpp
#include"ConcreteSubject.h"
#include<iostream>
using namespace std;

ConcreteSubject::ConcreteSubject(){
	cout << "ConcreteSubject" << endl;
}
ConcreteSubject::~ConcreteSubject(){
	cout << "~ConcreteSubject" << endl;
}
void ConcreteSubject::Request() {
	cout << "執行生產" << endl;
}
Proxy.cpp
#include "proxy.h"
#include<iostream>
using namespace std;
Proxy::Proxy(Subject* _sub)
{
	this->sub = _sub;
}
Proxy::~Proxy() {
	delete sub;
	cout << "~Proxy" << endl;
}
void Proxy::pre() {
	cout << "生產前工作" << endl;
}
void Proxy::end() {
	cout << "生產後工作" << endl;
}
void Proxy::Request() {
	this->pre();
	this->sub->Request();
	this->end();
}
main.cpp
#include"Subject.h"
#include"ConcreteSubject.h"
#include"proxy.h"
int main(void) {
	Subject* ConcreteSub = new ConcreteSubject();
	Proxy* pro = new Proxy(ConcreteSub);
	pro->Request();
	return 0;
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章