zoukankan      html  css  js  c++  java
  • python设计模式

     

    解释器模式

    多用于DSL,领域专用语言,

    from pyparsing import Word, OneOrMore, Optional, Group, Suppress, alphanums
    
     word = Word(alphanums)
     command = Group(OneOrMore(word))
     token = Suppress("->")
     device = Group(OneOrMore(word))
     argument = Group(OneOrMore(word))
     event = command + token + device + Optional(token + argument)
    

    上面的event可以用

    event.parseString(t)

    解析出t

    'open -> gate'  或者
    'increase -> boiler temperature -> 5 degrees'

     并从中提取出open,gate用于自定义的操作。 

    观察者模式

    一个对象的属性的改变可以同时通知观察者,定义观察者HexFormatter

    class HexFormatter:
        def notify(self, publisher):
            print("{}: '{}' has now hex data = {}".format(type(self).__name__, publisher.name, hex(publisher.data))) 

     观察对象

    class Publisher:
        def __init__(self):
            self.observers = []
        #添加观察者
        def add(self, observer):
            if observer not in self.observers:
                self.observers.append(observer)
            else:
                print('Failed to add: {}'.format(observer))
    
        def remove(self, observer):
            try:
                self.observers.remove(observer)
            except ValueError:
                print('Failed to remove: {}'.format(observer))
    
        def notify(self):
            [o.notify(self) for o in self.observers]
    
    class DefaultFormatter(Publisher):
        def __init__(self, name):
            Publisher.__init__(self)
            self.name = name
            self._data = 0
    
        def __str__(self):
            return "{}: '{}' has data = {}".format(type(self).__name__, self.name, self._data)
        #以object.data方式访问变量
        @property
        def data(self):
            return self._data
        #改变data值,最后通知观察者
        @data.setter
        def data(self, new_value):
            try:
                self._data = int(new_value)
            except ValueError as e:
                print('Error: {}'.format(e))
            else:
                self.notify()
    

      

     

    适配器模式

    class Adapter:
        def __init__(self,obj,adapter_method):
            self.obj = obj
            #add obj attr
            #var = vars(obj)
            #self.__dict__.update(var)
            self.__dict__.update(adapter_method)
    
        def __str__(self):
            return str(self.obj)
    

      

  • 相关阅读:
    圣诞放长假了
    设计模式Top10排行榜
    成长的烦恼
    小三的故事发家篇
    《家庭财务总管》升级(1.0.0.2)
    紧急项目处理方法
    隐身大法,使民无知
    如何维护自己文章的版权
    在深度学习的视觉VISION领域数据预处理的魔法常数magic constant、黄金数值: mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225]
    ImageNet数据集下载
  • 原文地址:https://www.cnblogs.com/who-a/p/6646695.html
Copyright © 2011-2022 走看看