設計模式學習(代理模式)
阿新 • • 發佈:2018-12-21
一.設計意圖:
為其他物件提供一種代理以控制對這個物件的訪問。
二.例子:
在公司中,客戶有需求都是向客服提,工程師則根據客服的反饋來修改產品。這時客服就是工程師們的代理。
1.首先建立統一介面
abstractimplement.h
class AbstractImplement
{
public:
AbstractImplement();
virtual ~AbstractImplement();
virtual void GetFeedBack() = 0;
};
abstractimplement.cpp
AbstractImplement::AbstractImplement()
{
}
AbstractImplement::~AbstractImplement()
{
}
2.建立工程師類
engineer.h
class engineer : public AbstractImplement
{
public:
engineer();
~engineer();
void GetFeedBack();
};
engineer.cpp
engineer::engineer() { } engineer::~engineer() { } void engineer::GetFeedBack() { qDebug() << "Modify requirement" << endl; }
3.然後我們建立客服類
server.h
class Server : public AbstractImplement
{
public:
Server();
~Server();
void GetFeedBack();
private:
engineer* eng;
};
server.cpp
Server::Server():eng(NULL) { } Server::~Server() { delete eng; } void Server::GetFeedBack() { if( eng == NULL ) { eng = new engineer(); } eng->GetFeedBack(); }
得到如下的結果
Modify requirement
三.結論:
優點:1.代理模式將代理物件與真正物件分離,在一定程度上降低耦合度
2.保護被代理的物件
缺點:1.增加了執行的消耗
2.直接訪問被代理者與訪問代理者可能有不同的結果
四.應用場景:
1.遠端代理
2.虛代理:需要建立開銷很大的物件,只有被真正需要時才建立。
3.保護代理
4.智慧指引