定义:
为其他对象提供一种代理以控制这个对象的访问
示例一:代理模式(通用版)
1. 类图12-3
2. 类图说明:
Subject 抽象主题角色:
抽象主题类可以使抽象类也可以是接口,是一个最普通的业务类型定义,无特殊要求。
RealSubject 具体主题角色:
也叫被委托角色,被代理角色。它是业务逻辑的具体执行者。
Proxy 代理主题角色:
也叫委托类、代理类。它负责对真是角色的应用,把所有抽象主题类定义的方法限制委托给真实主题角色实现,并且在真是主题角色处理完毕前后做预处理和善后处理工作。
3. 代码清单12-3:
********** 3. 通用代理模式,代码清单12-3:***************//
#include <QDebug>
#include <QDateTime>
class Subject
{
public:
virtual void request() = 0;
};
class RealSubject:public Subject
{
public:
virtual void request(){qDebug() << "RealSubject request";}
};
class Proxy:public Subject
{
public:
Proxy()
{
this->m_subject = new Proxy();
}
Proxy(Subject *subject)
{
this->m_subject = subject;
}
Proxy(QObject *object){}
virtual void request()
{
this->before();
this->m_subject->request();
this->after();
}
private:
void before(){qDebug() << "do something before";}
void after(){qDebug() << "do something after"; }
private:
Subject *m_subject;
};
int main()
{
Subject *subject = new RealSubject;
Proxy *proxy = new Proxy(subject);
proxy->request();
return 0;
}
示例二:打游戏
1. 类图12-1
2. 代码清单12-1:
********** 1.打游戏 ,12-1:***************//
#include <QDebug>
#include <QDateTime>
class IGamePlayer
{
public:
virtual void login(QString user, QString password) = 0;
virtual void killBoss() = 0;
virtual void upgrade() = 0;
};
class GamePlayer:public IGamePlayer
{
public:
GamePlayer(QString name)
{
this->m_name = name;
}
virtual void login(QString user, QString password)
{
qDebug() << "user name:" << user << " password: " << password;
}
virtual void killBoss()
{
qDebug() << this->m_name << "kill Boss!";
}
virtual void upgrade()
{
qDebug() << this->m_name << "upgrade!";
}
private:
QString m_name;
};
int main()
{
IGamePlayer *player = new GamePlayer("Tom");
QString time = QString::fromUtf8("HH:mm:ss.zzz");
qDebug() << QDateTime::currentDateTime().toString(time);
player->login("Tom", "password");
player->killBoss();
player->upgrade();
qDebug() << QDateTime::currentDateTime().toString(time);
return 0;
}