Design patterns
.pdfЯзык UML
●UML (Unified Modelling Language) - язык для визуализации, специфицирования и конструирования программных систем.
Booch G. The Unified Modeling Language User Guide, 2/E.
– Pearson Education India, 2005.
Тюльпин А.А, 2013
Singleton. Диаграмма классов
●Описание: Гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа.
●Пример: SDK для смартфона
○Класс, обеспечивающий доступ к датчикам телефона
○Класс, обеспечивающий доступ к датчику акселерометра
Тюльпин А.А, 2013
Метаклассы в Python
●Любой класс в Python является объектом
●Если класс - это объект, то какому классу он принадлежит?
●Класс в Python является объектом метакласса. По умолчанию он имеет имя type
●Можно создавать свои метаклассы с помощью наследования от type
http://habrahabr.ru/post/65625/
Singleton. Реализация на Python
class Singleton(type): _instances ={}
def __call__(cls, *args, **kwargs):
if cls notin cls._instances:
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs) return cls._instances[cls]
class Logger(metaclass=Singleton): pass
http://stackoverflow. com/questions/6760685/creating-a-
singleton-in-python
Тюльпин А.А, 2013
Composite. Диаграмма классов
●Описание: Компоновщик позволяет клиентам обращаться к отдельным объектам и к группам объектов одинаково.
● Пример: файловая система
<<interface>>
Composite. Реализация на Python
class Component(object):
def__init__(self,*args,**kw):
pass
def component_function(self): pass
class Leaf(Component):
def__init__(self,*args,**kw): Component.__init__(self,*args,**kw)
def component_function(self): print("some function")
class Composite(Component): def__init__(self,*args,**kw):
Component.__init__(self, *args, **kw) self.children =[]
def append_child(self, child): self.children.append(child)
def remove_child(self, child): self.children.remove(child)
def component_function(self):
map(lambda x: x.component_function(), self.children)
https://github.com/gennad/Design-Patterns-in-Python
Тюльпин А.А, 2013
Observer. Диаграмма классов
●Описание: Создает механизм у класса, который позволяет получать оповещения от других классов об изменении их состояния, тем самым наблюдая за ними
●Пример: Система, управляющая дверьми в супермаркете. В начале рабочего дня все двери открываются, а в конце - закрываются
Тюльпин А.А, 2013
Observer. Реализация на Python
class AbstractSubject:
def register(self, listener):
raise NotImplementedError("Must subclass me")
def unregister(self, listener):
raise NotImplementedError("Must subclass me")
def notify_listeners(self, event):
raise NotImplementedError("Must subclass me")
class Listener:
def__init__(self, name, subject): self.name = name subject.register(self)
def notify(self, event):
print(self.name, "received event", event)
class Subject(AbstractSubject): def__init__(self):
self.listeners = [] self.data =None
def getUserAction(self):
self.data =raw_input('Enter something to do:') return self.data
def register(self, listener): self.listeners.append(listener)
def unregister(self, listener): self.listeners.remove(listener)
def notify_listeners(self, event): for listener in self.listeners:
listener.notify(event)
https://github.com/gennad/Design-Patterns-in-Python
, 2013
State. Диаграмма классов
●Описание: Используется в тех случаях, когда во время выполнения программы объект должен менять свое поведение в зависимости от своего состояния.
●Пример: Инструмент графического редактора. Может, быть кистью, карандашом и т.д.