首页 > 其他分享 >【设计模式7】代理模式

【设计模式7】代理模式

时间:2023-04-10 15:31:39浏览次数:37  
标签:include name void 代理 模式 SchoolGirl 设计模式 string


基本概念

(1)代理模型:为其他对象提供一种代理以控制这个对象的访问。

(2)代理模式的适用场景:远程代理,也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实;虚拟代理,根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象,从而达到性能优化的目的;安全代理,用来控制真实对象访问时的权限;智能指引,当调用真实的对象时,代理处理另外一些事。

(3)代理模式一般结构

【设计模式7】代理模式_地址空间


Subject:定义了RealSubject 和 Proxy 的公共接口,这就在任何使用 RealSubject 的地方都可以使用Proxy

RealSubject类,定义Proxy 所代表的真实实体;

Proxy类,保存一个引用使得代理可以访问实体,并提供一个与Subject 的接口相同的接口,这样代理就可以用来替代实体。

具体案例

【设计模式7】代理模式_#include_02


【设计模式7】代理模式_地址空间_03

具体实现(VS,C++)

//#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;

class SchoolGirl
{
public:
	SchoolGirl();
	~SchoolGirl();
	SchoolGirl(string name) {
		this->name = name;
	}
	string getName() {
		return name;
	}
	void setName(string name) {
		this->name = name;
	}

private:
	string name;
};


class GiveGift
{
public:
	GiveGift();
	~GiveGift();
	virtual void giveDolls() = 0;
	virtual void giveFlowers() = 0;
	virtual void giveChocolate() = 0;
private:

};

class Presuit:public GiveGift
{
public:
	Presuit();
	~Presuit();
	SchoolGirl myGirl;
	Presuit(SchoolGirl myGirl) {
		this->myGirl = myGirl;
	}
	void giveDolls() {
		cout << myGirl.getName() << "送你洋娃娃" << endl;
	}
	void giveFlowers() {
		cout << myGirl.getName() << "送你鲜花" << endl;

	}
	void giveChocolate() {
		cout << myGirl.getName() << "送你巧克力" << endl;
	}

private:

};

class Proxy:public GiveGift
{
public:
	Proxy();
	~Proxy();
	Presuit littleDog;
	Proxy(SchoolGirl myGirl) {
		littleDog = Presuit(myGirl);
	}
	void giveDolls() {
		littleDog.giveDolls();
	}
	void giveFlowers() {
		littleDog.giveFlowers();

	}
	void giveChocolate() {
		littleDog.giveChocolate();
	}

private:

};

Presuit::Presuit()
{
}

Presuit::~Presuit()
{
}

SchoolGirl::SchoolGirl()
{
}

SchoolGirl::~SchoolGirl()
{
}
Proxy::Proxy()
{
}

Proxy::~Proxy()
{
}

GiveGift::GiveGift()
{
}

GiveGift::~GiveGift()
{
}


int main(int argc, char** argv)
{
	SchoolGirl bestWish("徐念");
	Proxy myBoy(bestWish);//中间代理(套娃)
	myBoy.giveDolls();
	myBoy.giveDolls();
	myBoy.giveFlowers();
	return 0;
}

关于作者

长期从事编程相关研究,涉及Qt、机械臂、轮式机器人、四足机器人的建模及仿真,可共同探讨编程相关问题,可指导课程设计及毕业设计,详询:QQ:2963325158


标签:include,name,void,代理,模式,SchoolGirl,设计模式,string
From: https://blog.51cto.com/u_16063698/6181013

相关文章

  • ASEMI代理AD8400ARZ10-REEL原装ADI车规级AD8226ARZ-R7
    编辑:llASEMI代理AD8400ARZ10-REEL原装ADI车规级AD8226ARZ-R7型号:AD8400ARZ10-REEL品牌:ADI/亚德诺封装:SOIC-8批号:2023+引脚数量:8安装类型:表面贴装型AD8400ARZ10-REEL汽车芯片AD8400ARZ10-REEL特征256位可变电阻装置更换1、2或4个电位计1千Ω,10千Ω,50公里Ω,100千......
  • ASEMI代理AD823AARZ-RL原装ADI车规级AD823AARZ-RL
    编辑:llASEMI代理AD823AARZ-RL原装ADI车规级AD823AARZ-RL型号:AD823AARZ-RL品牌:ADI/亚德诺封装:SOIC-8批号:2023+安装类型:表面贴装型引脚数量:8类型:车规级芯片AD823AARZ-RL特性单电源供电 轨到轨输出摆幅 输入电压范围扩展至地电压以下 3V至36V单电源供电能力高负......
  • 设计模式-代理模式
    定义为其他对象提供一种代理以控制对这个对象的访问类图时序图角色定义抽象主体角色:抽象类或者接口,普通业务的定义具体主体角色:被代理角色,业务逻辑的具体执行者代理主体角色:委托类,代理类优缺点优点职责清晰,实现好内部结构即可,具体客户要求由代理进行分化高扩展性......
  • Linux&Nginx16_Nginx反向代理6
    一、概念反向代理代理(ReverseProxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。首先我们先理解正向代理,如下图: ......
  • Java知识小拓展之适配器模式
    一:设计模式设计模式是一套被反复使用的、多数人知晓的、经过分类编写的、设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被人理解、保证代码的可靠性、程序的可靠性。简单的理解它就像给了你一个模板,是一种像数学中的一种解题套路一样,不同的是它有各种套路。二:适配器......
  • 云计算的三种模式IaaS/PaaS/SaaS/BaaS对比:SaaS架构设计分析
    SaaS——软件即服务(SoftwareasaService)的出现改变了传统使用软件转变为使用服务。SaaS与传统软件的最大区别是,前者按年付费租用服务,后者一次买断。这貌似只是“报价方式”的区别,实际上这是一个根本性的变化,这带来的是对服务模式、销售模式、公司价值等多维度的根本影响。传......
  • .NET Core MongoDB数据仓储和工作单元模式封装
    前言     上一章我们把系统所需要的MongoDB集合设计好了,这一章我们的主要任务是使用.NETCore应用程序连接MongoDB并且封装MongoDB数据仓储和工作单元模式,因为本章内容涵盖的有点多关于仓储和工作单元的使用就放到下一章节中讲解了。仓储模式(Repository )带来的好处是一......
  • Rust语言 学习05 枚举与模式匹配
    一、定义枚举enumMessage{Quit,Move{x:i32,y:i32},Write(String),ChangeColor(i32,i32,i32),}fnmain(){letq=Message::Quit;letm=Message::Move{x:12,y:24};letw=Message::Write(String::from("Hello"));letc......
  • 爬虫最后一天,爬取到的数据存到mysql中,爬虫和下载中间件、加代理、cookie、header、se
    爬到的数据存到mysql中classFirstscrapyMySqlPipeline:defopen_spider(self,spider):print('我开了')self.conn=pymysql.connect(user='root',password="",host='127.0.0.1......
  • [权限]基于角色+权限配置模式
    基于角色+权限配置模式可以将权限粒度设置的更细致一些。具体参考前端:登录成功后,再获取权限列表,在页面上进行权限判断。后端:不变登录当用户登录时,将用户角色写入到vuex,保存当前用户角色信息。vuex中import{createStore}from'vuex'exportdefaultcreateStore({......