0. iterator pattern
1. decorator pattern
@wrapper_fun
def some_fun(para):
pass
2. observer pattern
class Core(object):
def __init__(self):
self.observers = []
self._cnt = 0
def attach(self, observer):
self.observers.append(observer)
@property
def count(self):
return self._cnt
@count.setter
def count(self, value):
self._cnt = value
self._update_observers()
def _update_observers(self):
for observer in self.observers:
observer()
class Observer(object):
def __init__(self, core):
self.core = core
def __call__(self):
pass
def __main__():
c = Core()
o = Observer(c)
c.attach(o)
3. strategy pattern
class Abstraction(object):
def some_method(self):
raise NotImplementedError
class Implementation1(Abstraction):
def some_method(self):
pass
class Implementation2(Abstraction):
def some_method(self):
pass
def __main__():
i = Implementation1()
i.some_method()
class Implementation1(object):
def __call__(self):
pass
class Implementation2(object):
def __call__(self):
pass
def __main__():
Implementation1()
4. state pattern
class Context(object):
def __init__(self):
self.state = TransState()
def process():
self.state.process(self)
class State(object):
def process(context):
pass
class TransState(State):
def process(context):
if some_condition:
context.state = State1()
else:
context.state = State2()
pass
class State1(State):
def process(context):
context.state = TransState()
pass
class State2(State):
def process(context):
context.state = TransState()
pass
5. singleton pattern
传统的单例在python中并不常用,甚至是anti-pattern。为了避免创建一堆实例浪费memory,如果实在要用单例,Python中建议用module-level variables模拟单例模式。
class OneOnly(object):
_singleton = None
def __new__(cls, *args, **kwargs):
if not cls._singleton:
cls._singleton = super(OneOnly, cls).__new__(cls, *args, **kwargs)
return cls._singleton
6. template pattern
class TemplateClass(object):
def do_process(self):
self.step1()
self.step2()
self.step3()
def step1():
pass
def step2():
raise NotImplementedError
def step3():
pass
class Task1(TemplateClass):
def step2():
pass
class Task2(TemplateClass):
def step2():
pass
Reference
Python 3 Object-oriented Programming