//代理模式
//代理个性,作者增加代理个性(收费接口);书写类。让GamePlayerProxy继承俩个类增加自己个性。
class IGamePlayer {};
class Iproxy {
public:
void Count() {cout << "nubmer";}
};
class GamePlayerProxy : public IGamePlayer, public Iproxy {
};
//然后是动态代理
//我想作者应该是这样的思想
//构建抽象类;根据抽象类派生多个不同实体类
//用一个产生动态代理类来动态生成实体类对应得代理类。
//进入原型模式
//模式的核心是克隆,看代码理解(邮箱发送示例)
class AdvTemplate {
//发邮箱,顺便发点广告
private:
string m_strAdvsubject;//广告名称
string m_strAdvContext;//广告内容
public:
string GetAdvsuject () const {
return m_strAdvsubject;
}
string GetAdvcontext() const {
return m_strAdvContext;
}
};
class Mail {
//邮箱类了
private:
string m_strReceiever;//收件人
string m_strSubject;//邮件名称
string m_strAppellation;//称谓
string m_strContxt;//邮件内容
string m_strTail;//邮件尾部
public:
Mail(AdvTemplate* adv) {
m_strContxt = adv->GetAdvcontext();
m_strSubject = adv->GetAdvsuject();
}
string GetReceiver() const {return m_strReceiever;}
void SetReceiver(string rece) {m_strReceiever = rece;}
string GetSubject() const {return m_strSubject;}
void SetSubject(string sub) {m_strSubject = sub;}
//.......其他的属性接口......//
string GetTail() const {return m_strTail;}
void SetTail(string tail) {m_strTail = tail;}
//添加多次调用接口
Mail* Clone() {
Mail* clone = new Mail(new AdvTemplate);
clone->m_strAppellation = m_strAppellation;
clone->m_strContxt = m_strContxt;
//***进行一次深拷贝复制//
return clone;
}
};
class Client {
#define MAX_COUNT 6
static void main() {
int i = 0;
Mail* mail = new Mail(new AdvTemplate);
mail->SetTail("所有权");
while (i < MAX_COUNT) {
//进行克隆代码(为了标记注释)要修改下面的克隆对象 Mail* clonemail = mail->Clone();//
mail->SetSubject("***");
//***其他的邮箱信息设置*//
SendMail(mail);
i++;
}
}
//作者的重点在这。
//构建一个邮箱对象来设置用户发送邮箱是可以得,可是当邮箱过多的时候,为了在短时间完成
//我们就需要多线程来发送,而一个对象不可能在多个线程调用。所以要写clone函数
static void SendMail(Mail* mail) {
cout << mail->GetReceiver();
}
};
设计模式观后(c++还原之十 代理模式)
最新推荐文章于 2023-12-23 12:40:13 发布