Created
April 10, 2017 16:55
-
-
Save inesusvet/6a93fb021e42857a20c669ae938860e7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -* 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