赞
踩
作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
代理模式是一种结构型的软件设计模式,在不改变原代码前提下,提供一个代理,以控制对原对象的访问。
代理模式的优点:
代理模式的缺点:
客户端即Main主函数,本文示例中代理添加了额外功能-充值,因此客户端直接调用代理。
场景描述:游戏往往有自己的代理商,想要玩魔兽,需要和其代理进行沟通,在进行充值后,正常游戏。
- //Game.h
- /****************************************************/
- #pragma once
- #include <iostream>
-
- using namespace std;
-
- #include <iostream>
- using namespace std;
-
- // 抽象游戏类
- class Game
- {
- public:
- // 游戏加载
- virtual void load() = 0;
-
- // 游戏退出
- virtual void exit() = 0;
- };
-
- // 真实游戏类-魔兽世界
- class WOW : public Game
- {
- public:
- // 游戏加载
- virtual void load() {
- cout << "魔兽世界加载。" << endl;
- }
-
- // 游戏退出
- virtual void exit() {
- cout << "魔兽世界退出。" << endl;
- }
- };
-
- // 代理类-魔兽代理
- class ProxyWOW : public Game
- {
- public:
- // 构造函数
- ProxyWOW() {
- m_wow = new WOW();
- }
-
- // 析构函数
- virtual ~ProxyWOW() {
- if (m_wow != nullptr) {
- delete m_wow;
- m_wow = nullptr;
- }
- }
-
- // 充值时间
- void recharge(int money) {
- m_time += money / 100;
- cout << "充值:" << money << endl;
- cout << "获得时长:" << m_time << endl;
- }
-
- // 游戏加载
- virtual void load() {
- cout << "代理启动。" << endl;
- if (m_time > 0) {
- m_wow->load();
- cout << "游戏时长1小时。" << endl;
- m_time -= 1;
- cout << "剩余时长:" << m_time << endl;
- flag = true;
- }
- else {
- cout << "剩余游戏时长不足,请充值。" << endl;
- flag = false;
- }
- }
-
- // 游戏退出
- virtual void exit() {
- if (flag) {
- m_wow->exit();
- flag = false;
- }
- cout << "代理关闭。" << endl;
- }
-
- private:
- bool flag = false;
- int m_time = 0;
- WOW* m_wow;
- };
-
- //main.cpp
- /****************************************************/
- #include <iostream>
- #include <string>
- #include "Subject.h"
-
- using namespace std;
-
- int main()
- {
- // 玩魔兽
- ProxyWOW* proxy = new ProxyWOW();
- // 加载
- proxy->load();
- // 充值
- proxy->recharge(1000);
- // 加载
- proxy->load();
- // 退出
- proxy->exit();
- // 清理内存
- delete proxy;
- proxy = nullptr;
- return 0;
-
- }
程序结果如下。
本文提供的示例是游戏方面的,玩大型网络游戏往往都要通过代理的平台,所以我模拟了一个简易的充值和游戏流程。代理在生活中随处可见,各种中介服务就是代理的一种;在网络应用中代理也很常见,如服务器代理等等。
我尽可能用较通俗的话语和直观的代码例程,来表述我对代理模式的理解,或许有考虑不周到的地方,如果你有不同看法欢迎评论区交流!希望我举的例子能帮助你更好地理解代理模式。
如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。