1. 程式人生 > >設計模式學習(代理模式)

設計模式學習(代理模式)

一.設計意圖:

     為其他物件提供一種代理以控制對這個物件的訪問。

二.例子:

     在公司中,客戶有需求都是向客服提,工程師則根據客服的反饋來修改產品。這時客服就是工程師們的代理。

     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.智慧指引