• 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()
  • 相关阅读:
    POJ 3356 水LCS
    POJ 2250 (LCS,经典输出LCS序列 dfs)
    POJ 1080( LCS变形)
    整数划分问题之最大乘积
    进程调度之FCFS算法(先来先运行算法)
    c模拟银行家资源分配算法
    c模拟内存分配算法(首次适应算法,最佳适应算法,最坏适应算法)
    HDU 2602 Bone Collector(经典01背包问题)
    NYOJ 44 字串和 (最大字串和 线性dp)
    匈牙利游戏(codevs 1269)
  • 原文地址:https://www.cnblogs.com/Xjng/p/4029550.html
Copyright © 2020-2023  润新知