• 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()
  • 相关阅读:
    两个日期之间的天数
    npm设置使用registry
    Fckeditor 2.6 插入多媒体
    Java包行业命名规则习惯
    FCKeditor编辑器在JAVA中的使用与配置
    [智能架构系列]Buddy简单高效智能的后端架构[一]
    活在墙外
    [翻译]Ambari,hadoop的配置,管理和监控项目入门
    IT战车的驱动力码农到工程师
    hadoop 2.0 详细配置教程
  • 原文地址:https://www.cnblogs.com/Xjng/p/4029550.html
Copyright © 2020-2023  润新知