设计模式-代理模式 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;
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值