Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Design patterns

.pdf
Скачиваний:
11
Добавлен:
13.02.2015
Размер:
292.26 Кб
Скачать

Язык 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. Диаграмма классов

Описание: Используется в тех случаях, когда во время выполнения программы объект должен менять свое поведение в зависимости от своего состояния.

Пример: Инструмент графического редактора. Может, быть кистью, карандашом и т.д.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]