Python设计模式——外观模式

时间:2023-03-09 06:52:08
Python设计模式——外观模式

外观模式跟代理模式有点像,都是在client和目标的类之间建一个中间的类,client不直接调用目标的类,而是通过先调用中间类的方法,由中间类来实现怎么调用目标类。

代理模式用这种模式的目的是可以实现client和目标类不直接通信,使他们之间相互独立,这样就比较安全,因为client不知道目标类的存在。

外观模式的目的是通过建立一个中间类,把调用目标类的代码都封装好,例如有时候目标类有很多个,逐一得去调用它们会很麻烦,这样通过中间类封装好的接口,client的调用就好很简单

不适用外观模式的例子

#encoding=utf-8
__author__ = 'kevinlu1010@qq.com' class A():
def run(self):
print 'A run'
def jump(self):
print 'A jump' class B():
def run(self):
print 'B run'
def jump(self):
print 'B jump' class C():
def run(self):
print 'C run'
def jump(self):
print 'C jump' if __name__=='__main__':
a=A()
b=B()
c=C()
for item in ('a','b','c'):
locals().get(item).run()
for item in ('a','b','c'):
locals().get(item).jump()

使用外观模式

#encoding=utf-8
__author__ = 'kevinlu1010@qq.com' class A():
def run(self):
print 'A run'
def jump(self):
print 'A jump' class B():
def run(self):
print 'B run'
def jump(self):
print 'B jump' class C():
def run(self):
print 'C run'
def jump(self):
print 'C jump' class Facade():
def __init__(self):
self.a=A()
self.b=B()
self.c=C()
def run(self):
for item in ('a','b','c'):
getattr(self,item).run()
def jump(self):
for item in ('a','b','c'):
getattr(self,item).jump() if __name__=='__main__':
facade=Facade()
facade.run()
facade.jump()