代理模式:控制訪問?
裝飾器模式:增加職責
代理模式demo
假如有一個小孩兒掸冤,會吃飯、會玩、會休息
class IEatable:
? ? def drink:
? ? def eat:
class Iplayable:
? ? def gotoSea:
? ? def gotoPark:
class IRestable:
? ? def nightSleep:
? ? def middaySleep:
Child(IEatable,IPlayable,IRestable)
假如他還是個孩子,不會吃飯,這時候就需要代理幫忙(代理模式)
class ChildEatProxy(IEatable):
? ? def drink:
? ? ? ? print("杯子拿來")
? ? ? ? child.drink()
? ? ? ? print("杯子拿走")
這樣1來代理只實現(xiàn)了吃飯接口鞠评,所以限制了原對象的行為。關鍵詞:控制訪問
裝飾器模式demo
這些孩子中壕鹉,有一些孩子很聰明剃幌,從小就會詩朗誦、會唱歌晾浴,這時候负乡,不能讓所有孩子擁有這些特性,不能孩子實現(xiàn)所有接口脊凰。這只能算是部分孩子的一些特性抖棘。我們可以這樣做
class ISingable:
? ? def sing:
class SingableChild(IEatable,IPlayable,IRestable,ISingable):
? ? def sing:
? ? ? ?print("singing a song")
? ??def__getattr__(self, name):
????????return getattr(child, name)
這就是裝飾器模式,關鍵詞:增加職責
總結(jié)
其實不論是代理模式還是裝飾器模式狸涌,從外部來看切省,類還是那個類,其實本質(zhì)只是將類進行了一定的拆分帕胆。拆分的結(jié)果就是:高內(nèi)聚低耦合朝捆,職責更加清晰,也易于維護懒豹。