http://mcreativo.pl/
Wzorce projektowe przykłady w Php, Java.
Wszystkie wzorce opisane(eng) z książki: "Design Patterns: Elements of Reusable Object-Oriented Software" (Wyjątek zamiana Singletona na DI)
Generalnie każdy wzorzec krok po kroku, podobne rozwiązanie jak tutorial z Angulara, wszystkie kody działają i można pobrać z: https://bitbucket.org/mcreativo/. Dla każdego kroku osobny branch: step1, step2 itd...
W przyszłości zamierzam jeszcze dodać komentarze(fb) do każdej strony bo wiadomo większy feedback lepsza jakość kodu.
Jak juz piszesz po angielsku, to trzymaj sie tego do konca
tylko nie FB, wrzuć disqus, lepiej się sprawdza.
Co do strony super. Merytorycznie nieźle. Tylko może zrób wersję jasną i jakąś taką przystępniejszą.
Ta w prawdzie jest czytelna ale jakoś tak nie lubię ciemnych stron.
Tutaj liczy się merytoryka.
http://mcreativo.pl/design-patterns-php/spawnm/step1
thx Spawnm - w koncu to fixnalem
+ dodalem Mediatora: jakos mi umknął po drodze
Zajrzałem do wzorca strategia, bo akurat ostatnio go używałem i mam uwagę:
Strategia jest dynamiczna i zależna od kontekstu, a w Twoim przykładzie w php nie ma żadnego kontekstu, jest po prosty typowe proxy:
class Context { /** * @var StrategyA */ protected $strategyA; /** * @var StrategyB */ protected $strategyB; /** * @param StrategyA $strategyA * @param StrategyB $strategyB */ function __construct(StrategyA $strategyA, StrategyB $strategyB) { $this->strategyA = $strategyA; $this->strategyB = $strategyB; } public function doA() { $this->strategyA->doA(); } public function doB() { $this->strategyB->doB(); } }
class Context implements BusinessContextInterface { /** * @var StrategyA */ protected $strategyA; /** * @var StrategyB */ protected $strategyB; /** * @param StrategyA $strategyA * @param StrategyB $strategyB */ function __construct(StrategyA $strategyA, StrategyB $strategyB) { $this->strategyA = $strategyA; $this->strategyB = $strategyB; } public function do() { $rand = http://www.php.net/rand(0,1); switch ($rand) { case 0: $this->strategyA->do(); break; case 1: $this->strategyB->do(); break; } } }
Hmm sprawdziłem pierwsze dwa przykłady z google i "Strategia" nie polega na tym, że implementacja zależy od wewnętrznych stanów Context.
Zależy tylko od strategii którą wstrzykujemy. To prosty wzorzec projektowy.
http://www.oodesign.com/strategy-pattern.html
http://www.tutorialspoint.com/design_pattern/strategy_pattern.htm
Twój przykład bardziej pasuje pod wzorzec "State" zresztą to sa bardzo podobne wzorce.
A co do tego:
Context context = new Context(new StrategyA1(), new StrategyB2()); // to poniżej może być w zupełnie innym miejscu context.doA(); context.doB();
W takim razie nie zrozumiałem uproszczenia, wygląda to dla mnie jak bardzo proste proxy. Mój przykład stanem na pewno nie jest, wzorce podobne, ale w stanie implementacją steruje właśnie klient obiektu, a w strategii kontekst.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)