付费的网站推广该怎么做,品牌设计公司招聘,华为手机应用引擎,网站建设 信息化程度定义
为其他对象提供一种代理以控制(隔离#xff0c;使用接口)对这个对象的访问。。
应用场景
在面向对象系统中#xff0c;有些对象由于某种原因(比如对象创建的开销很大#xff0c;或者某些操作需要安全控制#xff0c;或者需要进程外的访问等)直接访问会给使用者、或…定义
为其他对象提供一种代理以控制(隔离使用接口)对这个对象的访问。。
应用场景
在面向对象系统中有些对象由于某种原因(比如对象创建的开销很大或者某些操作需要安全控制或者需要进程外的访问等)直接访问会给使用者、或者系统结构带来很多麻烦。如何在不失去透明操作对象的同时来管理/控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。
结构 //test.cpp
/****************************************************/
#include Proxy.h
int main()
{// 玩魔兽ProxyWOW* proxy new ProxyWOW();// 加载proxy-load();// 充值proxy-recharge(1000);// 加载proxy-load();// 退出proxy-exit();// 清理内存delete proxy;proxy nullptr;return 0;
}代码示例
//Proxy.h
/****************************************************/
#ifndef PROXY_H
#define PROXY_H
#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;
};#endif运行结果
要点总结
“增加一层间接层”是软件系统中对许多复杂问题的一种常见解决方法。在面向对象系统中直接使用某些对象会带来很多问题作为间接层的proxy对象便是解决这一问题的常用手段。具体proxy设计模式的实现方法、实现粒度都相差很大有些可能对单个对象做细粒度的控制如copy-on-write技术 有些可能对组件模块提供抽象代理层,在架构层次对对象做proxy。Proxy并不一定要求保持接口完整的一致性只要能够实现间接控制有时候损及一些透明性是可以接受的。