zoukankan      html  css  js  c++  java
  • 设计模式之代理模式

    from abc import ABCMeta, abstractmethod
    
    """
    设计要点:
        主题(Subject):定义操作、活动、任务的接口类
        真实主题(RealSubject):真正完成操作、活动、任务的具体类
        代理主题(ProxySubject):代替真实主题完成操作、活动、任务的代理类
    
        真实主题与代理主题是一类对象,只不过是将真实主题传入代理主题,由代理主题做一些操作,在调用,使得对客户隐藏真实主题,
        有点中介模式、装饰模式的意味。
    """
    
    class Subject(metaclass=ABCMeta):
        """主体类"""
        def __init__(self, name):
            self.__name = name
    
        def getName(self1):
            return self.__name
    
        @abstractmethod
        def request(self, content=""):
            pass
    
    
    class RealSubject(Subject):
        """真实主题类"""
        def request(self, content):
            print("RealSubject todo something...")
    
    
    class ProxySubject(Subject):
        """代理主题类"""
        def __init__(self, name, subject):
            super().__init__(name)
            self.__realSubject = subject
    
        def request(self, content=""):
            self.preRequest()
            if(self.__realSubject is not None):
                self.__realSubject.request(content)
            self.afterRequest()
    
        def preRequest(self):
            print("preRequest")
    
        def afterRequest(self):
            print("afterRequest")
    
    
    def testProxy():
        realObj = RealSubject("RealSubject")
        proxyObj = ProxySubject("ProxySubject", realObj)
        proxyObj.request()
    
    
    if __name__ == "__main__":
        testProxy()
  • 相关阅读:
    signalr推送消息
    WebApi2跨域问题
    iTextSharp生成pdf的一个简单例子
    遇到的错误记录
    AutoMapper用法
    visual studio 2015中的webapi生成helpPage,页面不显示方法说明问题解决
    visualstudio 2013 mysql entityframework :实体模型无法添加,闪退
    webapi相关知识
    2016年4月14日
    2016年4月13日
  • 原文地址:https://www.cnblogs.com/loveprogramme/p/12995814.html
Copyright © 2011-2022 走看看