Site Tools


pattern

наблюдатель - отсылка данных один ко многим
стратегия - замещает алгоритмы
декоратор - обертывает действие, дополняя или изменяя его
фабрика - независимое создание объектов (фабричный метод/абстрактная фабрика)
синглтон(одиночка) - возможно создание только одного объекта класса
команда - всмысле приказа, а не группы людей. Отделяет клиента (пульт, или иное заказывающее устройство) от действия необходимого при выполнение (нажатие кнопки).
адаптер - маскирует один класс под интерфейс других классов.
фасад - Использует композицию и делегирование для свзи множество подсистем и использование их в методах этого фасада. упрощает кодирование клиенту фасада.
шаблонный метод - определяет скелет алгоритма в абстактном классе, остовляя определение реализации некоторых шагов субкласам.
интератор - создание собственных итераторов для разнообразных контейнеров
компоновщик - объединяет объекты в древовидные структуры для предоставления иерархии “часть-целое”
состояние - Управление состояниями и переходами между ними.
MVC - Model/Viwer/Controler - принцип взаимодействия GUI, когда все 3 части имеют слабую связанность и могут быть заменены

Discussion

Constantin Conovaloff, 2015/05/14 19:15

Простым языком

Абстрактная фабрика

Изготовляем мы пиццу, и сказали нам использовать абстрактную фабрику.

Q: Какие задачи абстрактной фабрики?
A: Указать интерфейсы которые можно использовать.

Есть у нас своя абстрактная фабрика, например: AbstractPizzaFabric и есть у нее метод createGoodPizza и createBadPizza
Там мы готовим сырную и грибную пиццу. CheesePizzaFabric  MushroomPizzaFabric которые реализуют AbstractFabricLeninskiy123

В CheesePizzaFabric->createBadPizza мы находим на сыр на местной помойке и приготавливаем из этого пиццу.

В итоге, у нас получается:


function createPizza(AbstractPizzaFabric $abf){
    return random ? $abf->createBadPizza() : $abf->createGoodPizza();
}

$cpf = new CheesePizzaFabric();
$pizza = createPizza($cpf);

Вот и все.

Просто фабрика

На примере с пиццей:

Создаем PizzaFabric которая имеет createPizza(string) и знает как создавать конкретные виды пицц.
В итоге, мы используем это так:
$pf = new PizzaFabric();
$cheezePizza = $pf->createPizza($pf::CheezePizza)
$garbagePizza = $pf->createPizza($pf::GarbagePizza)


То как это создается внутри, уже никого не волнует. Вся соль в интерфейсах.
Constantin Conovaloff, 2015/05/14 19:44

Зачем?!

Если находишься в условиях фанатичного использования абстракций, где каждый день все эти абстракции портят тебе настроение, то можно успокаиваться себя следующими доводами:

  1. Упрощенное тестирование. Даже если у тебя его нету… все равно, лучше писать с мыслью в голове, что кто-то, где-то пишет под все это свои тесты с mock-классами. Например: http://blog.byndyu.ru/2009/12/blog-post.html
  2. Все должно быть заменяемо. Даже если ты хочешь просто сделать print('Hello'), то тут можно иметь 2 интерфеса, чтобы заменить метод которым ты будешь печатать и само сообщение которое может генерируется в зависимости от вспышек на солнце. Когда ты что-то пишешь, то нужно забыть о собственном удовольствие, времени и попытке написать меньше. Так как главные приоритеты, это чтобы все везде можно было заменить. Чтобы можно было воспользоваться чем угодно просто передав ему только mock классы. Так что, почти все аргументы должны принимать не определенные классы а интерфейсы и т.д.
You could leave a comment if you were logged in.
pattern.txt · Last modified: 2013/03/03 17:06 by konovalov

Page Tools