Skip to content

Instantly share code, notes, and snippets.

@inesusvet
Created April 10, 2017 16:55
Show Gist options
  • Save inesusvet/6a93fb021e42857a20c669ae938860e7 to your computer and use it in GitHub Desktop.
Save inesusvet/6a93fb021e42857a20c669ae938860e7 to your computer and use it in GitHub Desktop.
# -* coding: utf-8 -*-
"""
Memento
Не нарушая инкапсуляцию, определяет и сохраняет внутреннее состояние объекта и позволяет позже восстановить объект в этом состоянии
Chain of responsibility
Избегает связывания отправителя запрос с его получателем, давая возможность обработать запрос более чем одному объекту. Связывает объекты-получатели и передает запрос по цепочке пока объект не обработает его
Observer
Определяет зависимость один-ко-многим между объектами так, что когда один объект меняет свое состояние, все зависимые объекты оповещаются и обновляются автоматически
Command
Инкапсулирует запрос в виде объекта, позволяя передавать их клиентам в качестве попметров, ставить в очередь, логгировать и иметь возможность отменить операцию
State
Позволяет объекту изменять свое поведение в зависимости от внутреннего состояния
Interpreter
Получая формальный язык, определяет представление его грамматики и интерпретатор, использующий это представление для обработки выражений языка
Strategy
Определяет группу алгоритмов, инкапсулирует их и делает взаимозаменяемыми. Позволяет изменять алгоритм независимо от клиентов, его использующих
Iterator
Предоставляет способ последовательного доступа к элементам множества, независимо от его внутреннего устройства
Template method
Определяет алгоритм, некоторый этапы которого делегируются подклассам. Позволяет подклассам переопределить эти этапы, не меняя структуру алгоритма
Mediator
Определяет объект, инкапсулирующий способ взаимодействия обектов. Обеспечивает слабую связь, избавляя объкеты от необходимости прямо ссылаться друг на друга и дает возможность назависимо менять их взаимодействие
Visitor
Представляет собой операцию, которая будет выполнена над объектами группы классов. Дает возможность определить новую опреацию без изменения кода классов, над которыми эта операция проводится
Adapter
Конвертирует интерфейс класса в другой интерфейс, ожидаемый клиентом. Позволяет классам с разными интерфейсами работать вместе
Proxy
Предоставляет замену другого объекта для контроля доступа к нему
Bridge
Разеляет абстракцию и реализацию так, чтобы они могли изменяться независимо
Abstract factory
Предоставляет интерфейс для создания групп связанных или зависимых объектов, не указывая их конкретный класс
Composite
Компонует объекты в древовидную структуру, представляя их в виде иерархии. Позволяет клиенту одинаково обращаться как к отдельномуобъекту, так и к целому поддереву
Builder
Разделяет создание сложного объекта и инициализацию его состояния так, что одинаковый процесс может создать объекты с разным состоянием
Decorator
Динамически предоставляет объекту дополнительные возможности. Представляет собой гибкую альтернативу наследованию для расширения функциональности
Factory method
Определяет интерфейс для создания объекта, но позволяет объектам решать, какой класс инстанцировать. Позволяет делегировать создание объекта подклассам
Facade
Предоставляет единый интерфейс к группе интерфейсов подсистемы. Опеделяет высокоуровневый интерфейс, делая подсистему проще для использования
Propotype
Определяет несколько видов объектов, чтобы при создании использовать объект-прототип и создает новые объекты, копируя прототип
Flyweight
Благодаря совместному использованию, поддерживает эффективную работу с большим количеством объектов
Singleton
Гарантирует, что класс имеет только один экземпляр и предоставляет глобальную точку доступа к нему
"""
import random
INVERTED = ('\033[7m', '\033[0m')
def main():
lines = __doc__.strip().split('\n\n')
name, definition = random.choice(lines).split('\n')
print(INVERTED[0], name, INVERTED[1])
print(definition)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment