當前位置:
首頁 > 知識 > 設計模式之代理模式

設計模式之代理模式

點擊上方

Python開發

」,選擇「置頂公眾號」



關鍵時刻,第一時間送達!



代理模式(Proxy Pattern):為其他對象提供一種代理以控制對這個對象的訪問。



代理模式的模型如下:

#設計模式——代理模式


#代理模式(Proxy Pattern):為其他對象提供一種代理以控制對這個對象的訪問

#模型:


#公共介面類


class

InterFace

:


   

def

request

(self)

:


       

pass


#真實類


class

RealSubject

(InterFace)

:


   

def

request

(self)

:


       

print

"RealSubject request"


#代理類 調用真實類的內部方法


class

ProxySubject

(InterFace)

:


   

def

request

(self)

:


       self.real = RealSubject()
       self.real.request()

有個非常典型的例子,某男生追求女生,但是不敢向其表白,所以委託另外一男生為代理,代他送禮物給女生。實現這個需求的重點是,男生和女生是不互相直接接觸的,都是通過代理男生,實現間接接觸。

#!/usr/bin/env python


# -*- coding:utf-8 -*-

__author__ =

"Andy"

"""
實現:戴勵 替 卓賈易 送禮物給 嬌嬌
"""

# 送禮物介面


class

GiveGift

(object)

:


   

# 送洋娃娃


   

def

GiveDolls

(self)

:


       

pass

   

# 送花

   

def

GiveFlowers

(self)

:


       

pass

   

# 送巧克力


   

def

GiveChocolate

(self)

:

       

pass

# 被追求者類


class

SchoolGirl

(object)

:


   

def

__init__

(self, name)

:

       self.name = name

# 追求者類


class

Pursuit

(GiveGift)

:


   

def

__init__

(self, Girl)

:


       self.Girl = Girl

   

def

GiveDolls

(self)

:


       

print

self.Girl.name,

"送你洋娃娃"

   

def

GiveFlowers

(self)

:


       

print

self.Girl.name,

"送你花"

   

def

GiveChocolate

(self)

:


       

print

self.Girl.name,

"送你巧克力"

# 代理類


class

Proxy

(GiveGift)

:


   

def

__init__

(self, Girl)

:


       self.proxy = Pursuit(Girl)

   

# 送洋娃娃


   

def

GiveDolls

(self)

:


       self.proxy.GiveDolls()

   

# 送花


   

def

GiveFlowers

(self)

:


       self.proxy.GiveFlowers()

   

# 送巧克力


   

def

GiveChocolate

(self)

:


       self.proxy.GiveChocolate()

if

__name__ ==

"__main__"

:
   jiaojiao = SchoolGirl(

"jiaojiao"

)
   daili = Proxy(jiaojiao)
   daili.GiveDolls()
   daili.GiveFlowers()
   daili.GiveChocolate()

上面的類的設計如下圖: 



代理類Proxy引用代理的實體Pursuit,提供與Pursuit相同的介面來代替實體。






  • 作者:Andy 



  • 原文鏈接:http://www.cnblogs.com/onepiece-andy/



  • Python開發整理髮布,轉載請聯繫作者獲得授權


【點擊成為Android大神】

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python開發 的精彩文章:

當我們學Python時,我們在學什麼?
平衡二叉辮

TAG:Python開發 |