IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【设计模式5】代理模式cpp -> 正文阅读

[C++知识库]【设计模式5】代理模式cpp

结构型模式:
类和类的组合获取更大的结构。

代理模式(Proxy模式) 结构型模式之一,可以为其他对象提供一种代理以控制对这个对象的访问
代理是指具有与代理元(被代理的对象)具有相同接口的类,客户端必须通过代理与被代理的目标类交互。
当一个对象不适合或者不能直接引用另一个对象的时候,利用代理对象作为中介完成。
应用:
1、远程代理,一个对象在不同地址空间提供局部代表,WebService调用代理实现远程访问。
2、虚拟代理,对实例化开销很大的对象通过代理存放优化,如HTML的未打开图片框,存储路径和尺寸调用图片打开。
3、安全代理,控制真实对象的访问权限。
4、智能指引,调用真实对象时,代理处理另外一些事(在访问对象时附加一些内务处理)

例子:通过代理去验证用户名和密码,再去调用真正的系统。
在这里插入图片描述

/*
2021.10.02 代理模式
代理模式(Proxy模式) 结构型模式之一,可以**为其他对象提供一种代理以控制对这个对象的访问**。
代理是指具有与代理元(被代理的对象)具有相同接口的类,客户端必须通过代理与被代理的目标类交互。
当一个对象不适合或者不能直接引用另一个对象的时候,利用代理对象作为中介完成。*/
#include <iostream>
#include <string>
using namespace std;

/*黑马程序员--简单系统代理*/
//抽象接口类
class AbstractCommonInterface {
public:
	virtual void run() = 0;
};

//写好的系统
class MySystem : public AbstractCommonInterface {
public:
	virtual void run() {
		cout << "System" << endl;
	}
};


//提供一种代理来控制对其他对象的访问
class MySystemProxy :public AbstractCommonInterface {
public:
	MySystemProxy(string usename, string password) {
		this->mUsername = usename;
		this->mPassword = password;
		pSystem = new MySystem;
	}
	bool checkUsenameAndPassword() {
		if (mUsername == "admin"&&mPassword == "admin") {
			return true;
		}
		else return false;
	}
	virtual void run() {
		if (checkUsenameAndPassword()) {
			cout << "usename and password are correct" << endl;
			pSystem->run();
		}
		else {
			cout << "usename or password is false" << endl;
		}
	}
	~MySystemProxy() {
		if (pSystem != nullptr) {
			delete pSystem;
		}
	}
public:
	MySystem* pSystem;
	string mUsername;
	string mPassword;
};

void test01() {
	string usename, password;
	cout << "please input usename and password" << endl;
	cin >> usename >> password;
	MySystemProxy* proxy = new MySystemProxy(usename, password);
	proxy->run();
}
int main() {
	test01();
	system("pause");
	return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-03 16:54:12  更:2021-10-03 16:54:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 22:40:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码