設計模式之代理模式
點擊上方
「
Python開發
」,選擇「置頂公眾號」
關鍵時刻,第一時間送達!
代理模式(Proxy Pattern):為其他對象提供一種代理以控制對這個對象的訪問。
代理模式的模型如下:
#設計模式——代理模式 #代理模式(Proxy Pattern):為其他對象提供一種代理以控制對這個對象的訪問
#模型:
#公共介面類
class
InterFace
:def
request
(self)
:pass
#真實類
class
RealSubject
(InterFace)
:def
request
(self)
:"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)
:"送你洋娃娃"
def
GiveFlowers
(self)
:"送你花"
def
GiveChocolate
(self)
:"送你巧克力"
# 代理類
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大神】
TAG:Python開發 |