代理模式与Android -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

   

    代理模式(Proxy)

    一、 什么是代理模式

    先来看看官方的说法,代理模式就是为其他对象提供一种代理,以控制对这个对象的访问,

代理模式与Android

    看来这个官方的说法的确有点官方,看了还是让人感觉不点不知所措,还是不明白代理模式是什么,究竟是用来做什么的。

    其实代理这个名词,对于我们来说其实并不陌生,生活中有很多关于代理的例子。例如校园代理等,就以校园代理来讲,这个校园代理就是为他对应的上司的作代理,而这个校园代理的工作就是访问校园中的学生,例如对学生进行问卷之类的事。在这个例子中,学生就是官方说法中的其他对象,校园代理的上司就通过控制这个校园代理来控制对学生的访问。这下应该明白一点了吧。

    二、 代理模式的类图

   

    三、 代理模式的实现代码(C++实现)<喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD48cD7S1MnPw+bLtbXE0KPUsLT6wO3OqsD919OjrM7Sw8fAtNK7tsO0+sDtxKPKvbXEt+eyyaOszqrBy7j8usO12MDtveLV4rj2xKPKvaOsu7nKx9Kq1/fSu7XjtcS94srNtcSho9Taz8LD5rXEtPrC69bQo6y9q7P2z9bI/bj2wOCjrFdvcmtlcqGiQm9zc7rNU2Nob29sUHJveHmjrMv7w8e31rHwttTTpsnPzby1xFN1YmplY3SholJlYWxTdWJqZWN0us1Qcm94edXiyP249sDgo6y2+NXi0KnA4NbQtcRkb1N1cnZlebe9t6ijrL7NysfP4LWx09rJz8281tC1xFJlcXVlc3S3vbeooaM8L3A+PHA+IDwvcD48cD7XoqO6xuTKtcnPzbzWu8rH0ru49rT6wO3Eo8q9tcRVTUzEo9DNzbyjrFJlcXVlc3TG5Mq1yse0+rHt18XL+dPQUHJveHm6zVJlYWxTdWJqZWN0tcS5stPDvdO/2qOstviyu732vfbKx9XiwO/L+dC0tcTSu7j2oaM8L3A+PHA+IDwvcD48cD7G5Mq1z9a0+sLryOfPwqOocHJveHkuY3Bwo6mjujwvcD48cD4xoaJXb3JrZXLA4LXEtqjS5cjnz8KjrMv809DSu7j2ZG9TdXJ2ZXm1xL3Tv9o8L3A+PHA+PC9wPjxwcmUgY2xhc3M9"brush:java;">class Worker { public: virtual void doSurvey() = 0; virtual ~Worker(){} };

    2、Boss类定义如下,它继承Worker类,并实现doSurvey接口

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    class Boss : public Worker

    {

    public:

    virtual void doSurvey()

    {

    cout << "The ABCDE company do sruvey!" << endl;

    }

    };

    3、SchoolProxy类定义如下,它同样继承Worker类,并实现doSurvey接口,该类维护一个Boss类的对象的引用,并在它的中doSurvey方法中调用Boss的doSurvey方法。

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    class SchoolProxy : public Worker

    {

    public:

    SchoolProxy():

    _boss(NULL)

    {

    }

    virtual ~SchoolProxy()

    {

    if(_boss != NULL)

    {

    delete _boss;

    }

    }

    SchoolProxy(const SchoolProxy&proxy)

    {

    _boss = newBoss(*proxy._boss);

    }

    SchoolProxy& perator=(const SchoolProxy &rhs)

    {

    if(this != &rhs)

    {

    SchoolProxytmp_proxy(rhs);

    Boss *tmp_boss =tmp_proxy._boss;

    tmp_proxy._boss = _boss;

    _boss = tmp_boss;

    }

    return *this;

    }

    virtual void doSurvey()

    {

    if(_boss == NULL)

    {

    _boss = new Boss();

    }

    _boss->doSurvey();

    }

    private:

    Boss *_boss;

    };

最新文章