Python設計模式——代理模式(Proxy)


書中的例子是:男A喜歡女A,但是不敢向其表白,所以委托男B為代理,代他送禮物給女A,實現這個需求的重點是,男A和女A是不互相直接接觸的,都是通過代理男B,實現間接接觸。

#encoding=utf-8
__author__ = 'kevinlu1010@qq.com'
from abc import ABCMeta, abstractmethod


class FemaleA():
    def __init__(self, name):
        self.name = name


class Male():
    __metaclass__ = ABCMeta

    @abstractmethod
    def send_flower(self):
        pass

    @abstractmethod
    def send_chocolate(self):
        pass

    @abstractmethod
    def send_book(self):
        pass


class MaleA(Male):
    def __init__(self, name, love_female):
        self.name = name
        self.love_female = FemaleA(love_female)

    def send_flower(self):
        print '%s送花給%s' % (self.name, self.love_female.name)

    def send_chocolate(self):
        print '%s送巧克力給%s' % (self.name, self.love_female.name)

    def send_book(self):
        print '%s送書給%s' % (self.name, self.love_female.name)


class Proxy(Male):
    def __init__(self, name, proxyed_name, love_female):
        self.name = name
        self.proxyed = MaleA(proxyed_name, love_female)

    def send_flower(self):
        self.proxyed.send_flower()

    def send_chocolate(self):
        self.proxyed.send_chocolate()

    def send_book(self):
        self.proxyed.send_book()


if __name__ == '__main__':
    p = Proxy('男B', '男A', '女A')
    p.send_book()
    p.send_chocolate()
    p.send_flower()

 

代理模式的應用場景:

1.遠程代理,也就是為一個對象在不同的地址空間提供局部代表。這樣可以隱藏一個對象存在於不同地址空間的事實。

2.虛擬代理,是根據需要創建開銷大的對象。通過它來存放實例化需要很長時間的真是對象,例如html中,圖片需要load很久,所以通過虛擬代理來代替真實的圖片

3.安全代理,用來控制真實對象訪問時的權限

4.智能指引,是指當調用真實的對象時,代理處理另外一些事


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM