From de431c512682f057ca735ced342a96e877b1f925 Mon Sep 17 00:00:00 2001 From: John Webb Date: Thu, 31 Jul 2014 14:13:53 -0500 Subject: [PATCH] Added More pattern UMLs --- Behavioral/ChainOfResponsibilities/README.md | 4 + Behavioral/Command/README.md | 4 + Behavioral/Iterator/README.md | 4 + Behavioral/Mediator/README.md | 4 + Behavioral/Memento/README.md | 4 + Behavioral/NullObject/README.md | 4 + Behavioral/Observer/README.md | 6 +- Behavioral/Specification/README.md | 3 + Behavioral/State/README.md | 4 + Behavioral/Strategy/README.md | 4 + Behavioral/TemplateMethod/README.md | 4 + Behavioral/Visitor/README.md | 4 + Creational/AbstractFactory/README.md | 4 + Creational/Builder/README.md | 4 + Creational/FactoryMethod/README.md | 4 + Creational/Multiton/README.md | 4 + Creational/Pool/README.md | 4 + Creational/Prototype/README.md | 4 + Creational/SimpleFactory/README.md | 4 + Creational/Singleton/README.md | 6 +- Creational/StaticFactory/README.md | 4 + More/Delegation/README.md | 13 + More/Delegation/uml/Delegation.uml | 21 + More/Delegation/uml/uml.png | Bin 0 -> 5924 bytes More/Delegation/uml/uml.svg | 196 ++++++ More/Repository/README.md | 4 + More/Repository/uml/Repository.uml | 28 + More/Repository/uml/uml.png | Bin 0 -> 27162 bytes More/Repository/uml/uml.svg | 687 +++++++++++++++++++ More/ServiceLocator/README.md | 4 + More/ServiceLocator/uml/ServiceLocator.uml | 38 + More/ServiceLocator/uml/uml.png | Bin 0 -> 14374 bytes More/ServiceLocator/uml/uml.svg | 432 ++++++++++++ 33 files changed, 1508 insertions(+), 2 deletions(-) create mode 100644 More/Delegation/README.md create mode 100644 More/Delegation/uml/Delegation.uml create mode 100644 More/Delegation/uml/uml.png create mode 100644 More/Delegation/uml/uml.svg create mode 100644 More/Repository/uml/Repository.uml create mode 100644 More/Repository/uml/uml.png create mode 100644 More/Repository/uml/uml.svg create mode 100644 More/ServiceLocator/uml/ServiceLocator.uml create mode 100644 More/ServiceLocator/uml/uml.png create mode 100644 More/ServiceLocator/uml/uml.svg diff --git a/Behavioral/ChainOfResponsibilities/README.md b/Behavioral/ChainOfResponsibilities/README.md index 462f6c1..4d5b1d2 100644 --- a/Behavioral/ChainOfResponsibilities/README.md +++ b/Behavioral/ChainOfResponsibilities/README.md @@ -10,3 +10,7 @@ To build a chain of objects to handle a call. If one object cannot handle a call * a Spam filter * Caching: first object is an instance of e.g. a Memcached Interface, if that "misses" it delegates the call to the database interface * Yii Framework: CFilterChain is a chain of controller action filters. the executing point is passed from one filter to the next along the chain, and only if all filters say "yes", the action can be invoked at last. + +## UML Diagram + +![Alt ChainOfResponsibility UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/Command/README.md b/Behavioral/Command/README.md index 748b84f..adf2de3 100644 --- a/Behavioral/Command/README.md +++ b/Behavioral/Command/README.md @@ -15,3 +15,7 @@ Command can also be aggregated to combine more complex commands with minimum cop * A text editor : all events are Command which can be undone, stacked and saved. * Symfony2: SF2 Commands that can be run from the CLI are built with just the Command pattern in mind * big CLI tools use subcommands to distribute various tasks and pack them in "modules", each of these can be implemented with the Command pattern (e.g. vagrant) + +## UML Diagram + +![Alt Command UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/Iterator/README.md b/Behavioral/Iterator/README.md index d364490..46e96b8 100644 --- a/Behavioral/Iterator/README.md +++ b/Behavioral/Iterator/README.md @@ -11,3 +11,7 @@ To make an object iterable and to make it appear like a collection of objects. ## Note Standard PHP Library (SPL) defines an interface Iterator which is best suited for this! Often you would want to implement the Countable interface too, to allow `count($object)` on your iterable object + +## UML Diagram + +![Alt Iterator UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/Mediator/README.md b/Behavioral/Mediator/README.md index 5376000..818ff4c 100644 --- a/Behavioral/Mediator/README.md +++ b/Behavioral/Mediator/README.md @@ -9,3 +9,7 @@ like a controller (but not in the sense of the MVC). All components (called Colleague) are only coupled to the MediatorInterface and it is a good thing because in OOP, one good friend is better than many. This is the key-feature of this pattern. + +## UML Diagram + +![Alt Mediator UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/Memento/README.md b/Behavioral/Memento/README.md index 83ca2c0..4e3294e 100644 --- a/Behavioral/Memento/README.md +++ b/Behavioral/Memento/README.md @@ -16,3 +16,7 @@ When using this pattern, care should be taken if the originator may change other * The seed of a pseudorandom number generator * The state in a finite state machine + +## UML Diagram + +![Alt Momento UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/NullObject/README.md b/Behavioral/NullObject/README.md index 1e18d25..68f2bd0 100644 --- a/Behavioral/NullObject/README.md +++ b/Behavioral/NullObject/README.md @@ -18,3 +18,7 @@ a statement like `if (!is_null($obj)) { $obj->callSomething(); }` anymore. * Symfony2: null output in Symfony/Console * null handler in a Chain of Responsibilities pattern * null command in a Command pattern + +## UML Diagram + +![Alt NullObject UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/Observer/README.md b/Behavioral/Observer/README.md index c59a584..ccaeaca 100644 --- a/Behavioral/Observer/README.md +++ b/Behavioral/Observer/README.md @@ -11,4 +11,8 @@ To implement a publish/subscribe behaviour to an object, whenever a "Subject" ob ## Note -PHP already defines two interfaces that can help to implement this pattern: SplObserver and SplSubject. \ No newline at end of file +PHP already defines two interfaces that can help to implement this pattern: SplObserver and SplSubject. + +## UML Diagram + +![Alt Observer UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/Specification/README.md b/Behavioral/Specification/README.md index 39f0827..1f55b3b 100644 --- a/Behavioral/Specification/README.md +++ b/Behavioral/Specification/README.md @@ -5,3 +5,6 @@ Builds a clear specification of business rules, where objects can be checked against. The composite specification class has one method called `isSatisfiedBy` that returns either true or false depending on whether the given object satisfies the specification. +## UML Diagram + +![Alt Specification UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/State/README.md b/Behavioral/State/README.md index 7c4263f..71aff0f 100644 --- a/Behavioral/State/README.md +++ b/Behavioral/State/README.md @@ -3,3 +3,7 @@ ## Purpose Encapsulate varying behavior for the same routine based on an object's state. This can be a cleaner way for an object to change its behavior at runtime without resorting to large monolithic conditional statements. + +## UML Diagram + +![Alt State UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/Strategy/README.md b/Behavioral/Strategy/README.md index 88f43dd..9813487 100644 --- a/Behavioral/Strategy/README.md +++ b/Behavioral/Strategy/README.md @@ -14,3 +14,7 @@ To separate strategies and to enable fast switching between them. Also this patt * sorting a list of objects, one strategy by date, the other by id * simplify unit testing: e.g. switching between file and in-memory storage + +## UML Diagram + +![Alt Strategy UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/TemplateMethod/README.md b/Behavioral/TemplateMethod/README.md index ce435d2..c01c00c 100644 --- a/Behavioral/TemplateMethod/README.md +++ b/Behavioral/TemplateMethod/README.md @@ -12,3 +12,7 @@ How? With abstraction of course. In other words, this is a skeleton of algorithm, well-suited for framework libraries. The user has just to implement one method and the superclass do the job. It is an easy way to decouple concrete classes and reduce copy-paste, that's why you'll find it everywhere. + +## UML Diagram + +![Alt TemplateMethod UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/Visitor/README.md b/Behavioral/Visitor/README.md index 1ad8cc0..3db1d9c 100644 --- a/Behavioral/Visitor/README.md +++ b/Behavioral/Visitor/README.md @@ -6,3 +6,7 @@ The Visitor Pattern lets you outsource operations on objects to other objects. T But classes have to define a contract to allow visitors (the `Role::accept` method in the example). The contract is an abstract class but you can have also a clean interface. In that case, each Visitor has to choose itself which method to invoke on the visitor. + +## UML Diagram + +![Alt Visitor UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/AbstractFactory/README.md b/Creational/AbstractFactory/README.md index aa084fc..34d457d 100644 --- a/Creational/AbstractFactory/README.md +++ b/Creational/AbstractFactory/README.md @@ -4,3 +4,7 @@ To create series of related or dependent objects without specifying their concrete classes. Usually the created classes all implement the same interface. The client of the abstract factory does not care about how these objects are created, he just knows how they go together. + +## UML Diagram + +![Alt AbstractFactory UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/Builder/README.md b/Creational/Builder/README.md index 3a85f51..573816a 100644 --- a/Creational/Builder/README.md +++ b/Creational/Builder/README.md @@ -13,3 +13,7 @@ Note: Builders have often a fluent interface, see the mock builder of PHPUnit fo ## Examples * PHPUnit: Mock Builder + +## UML Diagram + +![Alt Builder UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/FactoryMethod/README.md b/Creational/FactoryMethod/README.md index 10af7fd..ae4cfb6 100644 --- a/Creational/FactoryMethod/README.md +++ b/Creational/FactoryMethod/README.md @@ -9,3 +9,7 @@ For simple case, this abstract class could be just an interface This pattern is a "real" Design Pattern because it achieves the "Dependency Inversion Principle" a.k.a the "D" in S.O.L.I.D principles. It means the FactoryMethod class depends on abstractions, not concrete classes. This is the real trick compared to SimpleFactory or StaticFactory. + +## UML Diagram + +![Alt FactoryMethod UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/Multiton/README.md b/Creational/Multiton/README.md index 938de9c..26c9a38 100644 --- a/Creational/Multiton/README.md +++ b/Creational/Multiton/README.md @@ -10,3 +10,7 @@ To have only a list of named instances that are used, like a singleton but with * 2 DB Connectors, e.g. one for MySQL, the other for SQLite * multiple Loggers (one for debug messages, one for errors) + +## UML Diagram + +![Alt Multiton UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/Pool/README.md b/Creational/Pool/README.md index a39c3b2..7229a5a 100644 --- a/Creational/Pool/README.md +++ b/Creational/Pool/README.md @@ -6,3 +6,7 @@ The **object pool pattern** is a software creational design pattern that uses a Object pooling can offer a significant performance boost in situations where the cost of initializing a class instance is high, the rate of instantiation of a class is high, and the number of instances in use at any one time is low. The pooled object is obtained in predictable time when creation of the new objects (especially over network) may take variable time. However these benefits are mostly true for objects that are expensive with respect to time, such as database connections, socket connections, threads and large graphic objects like fonts or bitmaps. In certain situations, simple object pooling (that hold no external resources, but only occupy memory) may not be efficient and could decrease performance. + +## UML Diagram + +![Alt Pool UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/Prototype/README.md b/Creational/Prototype/README.md index 3a99777..80b54ca 100644 --- a/Creational/Prototype/README.md +++ b/Creational/Prototype/README.md @@ -7,3 +7,7 @@ To avoid the cost of creating objects the standard way (new Foo()) and instead c ## Examples * Large amounts of data (e.g. create 1,000,000 rows in a database at once via a ORM) + +## UML Diagram + +![Alt Prototype UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/SimpleFactory/README.md b/Creational/SimpleFactory/README.md index c165dc5..fedaa9d 100644 --- a/Creational/SimpleFactory/README.md +++ b/Creational/SimpleFactory/README.md @@ -7,3 +7,7 @@ ConcreteFactory is a simple factory pattern. It differs from the static factory because it is NOT static and as you know: static => global => evil! Therefore, you can have multiple factories, differently parametrized, you can subclass it and you can mock-up it. + +## UML Diagram + +![Alt SimpleFactory UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/Singleton/README.md b/Creational/Singleton/README.md index e85703a..5148762 100644 --- a/Creational/Singleton/README.md +++ b/Creational/Singleton/README.md @@ -14,4 +14,8 @@ To have only one instance of this object in the application that will handle all ## Diagram - \ No newline at end of file + + +## UML Diagram + +![Alt Singleton UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/StaticFactory/README.md b/Creational/StaticFactory/README.md index 6c22bc5..f5e2710 100644 --- a/Creational/StaticFactory/README.md +++ b/Creational/StaticFactory/README.md @@ -9,3 +9,7 @@ method to create all types of objects it can create. It is usually named `factor ## Examples * Zend Framework: `Zend_Cache_Backend` or `_Frontend` use a factory method create cache backends or frontends + +## UML Diagram + +![Alt StaticFactory UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/More/Delegation/README.md b/More/Delegation/README.md new file mode 100644 index 0000000..c51128c --- /dev/null +++ b/More/Delegation/README.md @@ -0,0 +1,13 @@ +# Delegation + +## Purpose + +... + +## Examples + +... + +## UML Diagram + +![Alt Delegation UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/More/Delegation/uml/Delegation.uml b/More/Delegation/uml/Delegation.uml new file mode 100644 index 0000000..ffb8e68 --- /dev/null +++ b/More/Delegation/uml/Delegation.uml @@ -0,0 +1,21 @@ + + + PHP + \DesignPatterns\More\Delegation\JuniorDeveloper + + \DesignPatterns\More\Delegation\JuniorDeveloper + \DesignPatterns\More\Delegation\TeamLead + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/More/Delegation/uml/uml.png b/More/Delegation/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..f673da2f47cfa3b71c36b999a529cdc47c25e29a GIT binary patch literal 5924 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 F{{S + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + writeBadCode() + + + + + + + + + + + + + JuniorDeveloper + + + JuniorDeveloper + + + + + + + + + + + + + + + + + + + slave + + + + + + + + + + + + + __construct(junior) + + + + + + + + + + + + + writeCode() + + + + + + + + + + + + + TeamLead + + + TeamLead + + + diff --git a/More/Repository/README.md b/More/Repository/README.md index 1c2216f..0e2b188 100644 --- a/More/Repository/README.md +++ b/More/Repository/README.md @@ -10,3 +10,7 @@ Repository also supports the objective of achieving a clean separation and one-w * Doctrine 2 ORM: there is Repository that mediates between Entity and DBAL and contains methods to retrieve objects * Laravel Framework + +## UML Diagram + +![Alt Repository UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/More/Repository/uml/Repository.uml b/More/Repository/uml/Repository.uml new file mode 100644 index 0000000..e18cfd7 --- /dev/null +++ b/More/Repository/uml/Repository.uml @@ -0,0 +1,28 @@ + + + PHP + \DesignPatterns\Repository\PostRepository + + \DesignPatterns\Repository\Storage + \DesignPatterns\Repository\MemoryStorage + \DesignPatterns\Repository\Post + \DesignPatterns\Repository\PostRepository + + + + + + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/More/Repository/uml/uml.png b/More/Repository/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..d22ede8b52c7cdc8d02c6bb26878e0c70b8d54e2 GIT binary patch literal 27162 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 At^fc4 literal 0 HcmV?d00001 diff --git a/More/Repository/uml/uml.svg b/More/Repository/uml/uml.svg new file mode 100644 index 0000000..8b9987c --- /dev/null +++ b/More/Repository/uml/uml.svg @@ -0,0 +1,687 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + persist(data) + + + + + + + + + retrieve(id) + + + + + + + + + delete(id) + + + + + + + + + + + + + Storage + + + Storage + + + + + + + + + + + + + + + + + + + data + + + + + + + + + + lastId + + + + + + + + + + + + __construct() + + + + + + + + + + + + persist(data) + + + + + + + + + retrieve(id) + + + + + + + + + delete(id) + + + + + + + + + + + + + MemoryStorage + + + MemoryStorage + + + + + + + + + + + + + + + + + + + id + + + + + + + + + + title + + + + + + + + + + text + + + + + + + + + + author + + + + + + + + + + created + + + + + + + + + + + + setId(id) + + + + + + + + + getId() + + + + + + + + + setAuthor(author) + + + + + + + + + getAuthor() + + + + + + + + + setCreated(created) + + + + + + + + + getCreated() + + + + + + + + + setText(text) + + + + + + + + + getText() + + + + + + + + + setTitle(title) + + + + + + + + + getTitle() + + + + + + + + + + + + + Post + + + Post + + + + + + + + + + + + + + + + + + + persistence + + + + + + + + + + + + __construct(persistence) + + + + + + + + + + + + getById(id) + + + + + + + + + save(post) + + + + + + + + + delete(post) + + + + + + + + + + + + + PostRepository + + + PostRepository + + + + + + + + + diff --git a/More/ServiceLocator/README.md b/More/ServiceLocator/README.md index 199b8cf..cdee496 100644 --- a/More/ServiceLocator/README.md +++ b/More/ServiceLocator/README.md @@ -14,3 +14,7 @@ Service Locator object on bootstrap. ## Examples * Zend Framework 2 uses Service Locator to create and share services used in the framework(i.e. EventManager, ModuleManager, all custom user services provided by modules, etc...) + +## UML Diagram + +![Alt ServiceLocator UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/More/ServiceLocator/uml/ServiceLocator.uml b/More/ServiceLocator/uml/ServiceLocator.uml new file mode 100644 index 0000000..2bfcfb3 --- /dev/null +++ b/More/ServiceLocator/uml/ServiceLocator.uml @@ -0,0 +1,38 @@ + + + PHP + \DesignPatterns\More\ServiceLocator\DatabaseServiceInterface + + \DesignPatterns\More\ServiceLocator\DatabaseServiceInterface + \DesignPatterns\More\ServiceLocator\LogService + \DesignPatterns\More\ServiceLocator\ServiceLocator + \DesignPatterns\More\ServiceLocator\ServiceLocatorInterface + \DesignPatterns\More\ServiceLocator\LogServiceInterface + \DesignPatterns\More\ServiceLocator\DatabaseService + + + + + + + + + + + + + + + + + + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/More/ServiceLocator/uml/uml.png b/More/ServiceLocator/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..1136eaa23d589e1f6743d8570c30b430b46205a7 GIT binary patch literal 14374 zcmbt*XH-*LyDn}vx9$ zAwWWC(mUK0aDU%E=iGC~x#Rv|jFq|Onscsqz4dt?!qin2Nr-8P2?z*C9xKUd5)fP( z2mU7h`U4n2k9V375D2e6mXp@@8edHh_q}6@*bfXGB4&BWk|^Xjpy`uW%Yw z>-_jmGd9`}(SunM*y`T%w~kE?@DjVabrQ(4$3Z~QDs~oC4V(i+NI(F-Oz;RrK=1;7 ziJ+H{fZ#oZfB<@(fB;MNzrS6ZoBhR}L8IX=rg|`7Lu9F$h9wJKcX&wgfl9X9!4{XK zW#*^B0lqOjBzUKp%FRky3zc>_7k<0n^^Qh_MmczKkkahkTe$tJZwmi>LI!LqO9pvY z1Q*?Drp)<(P8lB$S?NOrte)mILC!qpr#%^NwoHq-?Wu))EPKhmA1z>%0$%jtL9pKi zm3H42i`robI6@3$HfJ2+j<1;^xmtsY=mRhTV-+dvE9?d!cZu_D3+?T2>CaIo^>EWP zzs3G*Zf%Cq3S-PycYZ|5O=XPf-QlaxBr>ckB~ZW$!=-{@DAzR zhQ5Yu(~>@m{q8*hJ0FESnb=`p^aGMp2ctj&-S&S_exmC$ihix<||VMW{PAQ$Cc$# zFLAi{+`HXV{&NEZYG(_g&0h(92}!=e5o;%GO$yn}ldwgnY-PvQH3LVdk3)@`QL8aZ zX1`iweN2V(Jf^(3C`|Q?XdA*@1cNb)EtLFkEZWynj7w7KP*dRBiG|0DH;zJN@Sn@e zwgmITk`>d~(9rNfr8_-f(`lPVKh|E*8fg&hSD6?Mw|BgC+H7;&KcIH9VDM@eQPPLG zk!r+jz8~qDt*p}ZNG|;Kaln>{paeQU&>7R>YqvdAyRl)QQnGrwRwnA`@jh2!CtZg- ztmucG8_#>|(aT{9O%h@7s>Y-%Poo$ohTPm0DcUrCn&}so;C~wHyxd zEgL$~%16gUW|c*t%NRaeej1mTZ^IwidcaawN2jvfTZEoL#~PMl-&Uu?U}5LMgVr{5 z<2Q_zwK7$zJ?!E~;$-Ua($snRD3V)YM)Y<)v?anAaivF9pN6Gtve1)bBcpq_a0rJB zs3kj`bV}^VDOoI8EBh2s_s6DlWqYEf!Cy*q+Rl{@kss*&jW0z~eTl`x`vU5L9f7n&ox6O9qMjmZHJL0gl zNhsumad3;eI_Bz`dG5&H%X-l?*3;#zyLpedwXpFu)YvgxcAYL@vtP?<{1B|z4L71$ z*c9B`^l98g=&iiLCU!q%@0FksnDQT}$X6fvl=ksPrrLsXZkmh1s3?fRw(ze{;kot? zDQKO{DxWM^(0&wyjrs)5`-+#Z*h*2wdCM*S#lhxu?4FM0OjH(^WW5HT>bjB-e`4AG z-LO=T<|Mrh(n@7LO=)j29)+pnt({q-GZB8Gi&A!zpv6ek(nM2d2Hab$O`z*3a_#aO zp?@nH*{eeyTl+D$tCjVD#7+FD_Mi)=W-?FYRhjq}&RIA=GE8%1#vr=05SMpGCtx!% zO)V*A=M?jr5J^=A-99>@kIIul(%q}y{vtA1A1Sm*{Tt_b^W>NP-119N!6`6L%)wYXBba!bo4m$wL__;O+D-%b%i?ixdS3wba|o! zZsH^UZ7=16)5iJ-@g@pSOis%`D9!QiE^>v9DXI$x=iSk)Ivbu}5iX1_-M!skCgCCP zDYcJEjx&?Y8V%smuB~Go?fZQ6BPv4S@n6k*R3`J8z57pF^%JUVnkZA=EpyHbW3ZT} zOs5#6ZEjxPLJy5rDLl)jF7Y@<8UxNV5$B_t=@h7BEIPDY*Ij8L^#v3f zA$?nKLgvi}Vxz zItZ67F|pk^@Y_^;YX_~L>UTqdJd^5`f*fKq?Q|UD5&S_F9WTZ%^LXJ3hC$O_Kf7M-1swm}#zb}cxynQn8N@4$ z%`*{;AD{LQ@{PD}$X{I=O_i`Sva3eP_@3>2{V8^Zv;pR_j-(qso#(OLzD>lyQV1!* z%!ONa>s@9K9NW5?CgN#_(B4#lr_)ew`QMfFiOu3S;i8CHw`|GcQ4_WK(a6AoOiD^ zkYcHN`R0?WT-1O1v&(~!f*wDG@61wOUbiE5BYF>MJsb3z(th>z&ss9ram)5ero5V; zzt3*R5h`jGyYOc=q;-8ze<|sz+kM=A&MVJA7rWh50kz{*hwaohU-;^%hrkiHJ#|=% zLP|TQQw_vB_4EOv70%*)VCjErM<1DwcuTwbNecHl=MRu9eO}AcXk~4b8pG((L?|0F zL+oJWOW%5rr1ui`TS6V!{rh;<+Dpp73QUgwrdEP;3_LXiGB@X4$Llv=z6sJ2&eEQ0 z4fnZ-@7;4tBiq(}XfgYJa9o@$7K>&WzO2{8@TRfVWGjsCmzU|JoCO_JjKh z2y(FLn@7%%P_g;)K9tK^f@;Vm+s+wFH(ga*U*-x?-g0NUa(dc{ zp2_rHAw?evK#%(+Q48K5so^$@zC`?6Dv9DYZ4QsAhLfTT)*`!xrQh9)3nmYlxcz-7 z;!@Tih$oW(}J+JHW#6L80ywZ1@=xBzcrDPtVBQFSkH?>`2G6Y zvY3mMlsxM24G|U=K9TS_K4PQezhQFgVg^Gnpc}`$yTN?1;em zQ|FL9r6BZ+Ysc))eV^7rl;4d|dw?-#qv`y=%)RVd<|PR^T}Q;MM=_inG3{L|XDsaZ zau}#3YH3lSqXPi84~0r-99y+ftT*BA9tLlGo09A9OR8vLB!}p&quH?4%$vQcF7cuc zIaZ5IX2h?meiN^d_^(6O4mb{e{1+qQ6SNA#%Uw3>DSp~a(WBq+CU@7F z6|V{5BO5gTzNJbQD*+yHmZUmb8V%lCKNz$Az8}07nmGv6dM?D?0)2eHBvkYp;9r_a z*Cix3#`B^YcXqarNT0QA`yj5?f`{$7L$A4kl9tO9^{vhaHR`^;(R8+*_l3dOf40e< z;-iMpW0@08#i@|6+S)J@7;LB7x-~Tn{&I{Dcmh^svp(j6tyIf6_=$68Fm;y`di;GH zMjOfVZRd`A%B~%UmFJb^^4A%n!ex?F&`F?H6LYG|dcY8|V#hc2g>DuG{(#qEE<;r1 zx4QS-m(`GN$9iTGTQ6<)3|CgAoa>gKc?TNIu=J>xjerzMMMWr_f0glVaVI(`b=0sWJ`$l|;GqcS4QIx*aLsW5=|0bNRcB zcBCt?-*$ESd&TJn=CY@%ZZWf!bZz67OAt!TWLV0VyR}p01*as@Jh7jY-K(U$9fpR} zc>ER1B^a5MgXTNRxv;NPb_z!N$+7g2_Av;zr3H`r)mK!!LZC`%ydwd$(avZE`Rnoa zoKAB)anGIg07y}a=&yD*g~S*Au8h&fB-?7XS|=|bJ*u{L3(9A?Er;6JPin7lSjExA zOAq@rmbcaKs(0GHE-C1J_tdVEdTf5j$I`wN+GD5;jq%uUXokO;=D$;pd3{?9_v>J= z?@6vuqZWmSDoSyjW6(b4RakS#gkCYf>3e_0ggufAv(P8I{ka)I$t$_L7LN+_)X}f^ z?|FI0dZ?WG@#x-nUxh>t6Bk(%9i7FYZq;P77DdAy>V?ggyYYkp_z5#>-wIrcm}aa#Vud>f{i}{?&83~{2^)yE_7r1 z^zDime`rH8-XReIR-jWgx`jPBny!K3s`Xwco1Kn~BN|&2y$dv=Uo&L*jA7^0S_=o( zM-or&x-Mv!D$`g7ja^hHzJf8I9lF$wbBpGbCx+p0*%n5hj`@F-9J4mt>WVg+1EB&8 zkNsFJBnxh2%EHT-$W>;s+uP8GlNPukJ~EZPSV~LkAM^kiMNtY#?$a56-Zd_^mvOc~ zTg@wVn92!nWqlm|Fgv{D0XiXwBF^^X$a1^~j8^X+MVMUntLI-AIuh4YhH25+=?TSk z@JQ+BO)5Nz{(rjKGsoWn88Tfh$#v-*RDQ@YEd*zt)Lx9v_BE5DLhnx%Gx1ZeyVu8+ zvXoT<6XYDIe@vPL;{}t1SL_wfx5e37o+kSayTu)(NcZNThwZG7KSOJoZgnJZ$4SlW z6&vQzSkiEw#yb-~)Ed-Gdz$;=);)Ph@E!9!hb?bd>i`4m^HC%6F^ zp}1Xrvor_-r)mG|akPqEREzGCJzWHvG2syk@cV$TEBs>!!BuAYu>5F}Va@xbzccl0 zt9K%i$RJwBcGAtJUvc!@?c((s;=KFG-icJg4RJO$vxD45y>w?F6+d#q&bs$wS8!J8L=C<5@}Kd=10{BaI5f-hU40L-!0^E!Yu z0!|tqW&XnzpnwGP#whVW-qx%J&3LmLf~s%+SiOU#dTW5{`qTC3PjJZdVb?p-laept zSxK--rJL1i?;-3~pwhciJ`sgS=;f5oLd6uK#w z0n`P2%U-aA{nCTT-)@syX}~ zI>M!t?GXFgC#co?e8-Wo4~^DMStF9(i?0fM{Jpwv0R^W0h~vXO;*!jyfeHXY6fQ%o zU6x(vnF{*G^0?z0qnzpa{vtNv-v&zQ&W7}Q{20d@DSVH5QrE!xrn4HK6r^uo&g_lg zsjRHGuB?sG-FqTYrFhT(8!hRQ_f*PvWG=s5*k(|bVNT0TL$b#V9^ZXV|3D(hL9e6jmYvV{zCkY2VS)NoQn#-alph|Q zzfVmIh3q(+`?`saSApGguP@21*jI|kU6pHR;w#Sib7|bOhGiJ zeq2f>D)ci*2!6q=x})1MY*WM8D?u}I&wru6W7R{9^frm7o*u1la$oELcN3o@tF}ox zU(k~{iS`0z57CQw!LOuckSx2``HGns2>HObFLW$B`_9%Eu1C(vDX!LV6j^4s_?0s= z$=AElR6`$d$~+6n>hFEI5>h^}E@o(Dm1x8~3+>6lG z<3Gd^ALkgo_J}c^@qj*x%Xgf##Udm_G^jl+?{eR5e|daJ;1cl=W?W zV>Zm{Ii~Q&ej`TLKcKO}Rmm}y$p3?h4s2>oE{o{g8sfQk#eGf@!aV7RtK{a3iD#8n z&ZQd~8FpmMv!QvWLUsFMifDnm5QB)}*=s6x{K~tj?$Fu80q+0gbT^Mm1>T5C-v9#0 zZ`4UGVS@mOZU(hpWAB>RN1 zgD&&w-gzRpDahS#l)Db#Ep_?ax5DKHc@lWd5cY=75m6q7b+n-xkI5{~P46iE`7(CU zgi}`DgvK~S& z$rfoE)T(uUWZ%E$cCVgGP3K>3jOcGSw!-?i^Xj9HU8(;mE?KTiK*r}ko*Hp z8tC<}^BfGe*zWp@AEx$|oeq#aYrSeR31=b^JnI|SU#wF&xZhEYB}%M}kb^L( zERd)90u@XrH~`lgB4sAxq61BP4q$!uYnvnrn|Rq_(B9i3Lf<0$)Go#F@JkkCr$;S>D{?&(S2dIW z87nezLM&J~)Vcdq#Z9LR3^`5hRMQtRAKIR*?Tdu~()IJ<1hGA=fLs&B&|iWVeXT;j7Xw=7(`R(m{ddJY2{R;7}+ z40@fWlH*Eb#y{s%bO~)$PC5x$IIdZqvh#{6%~=I|pTEfc8hFk|(~O^RZ4D#INBhIk>qEOMoCv$H3PRIy*J6>6zlt)=!*C?h&~`kjFq@5u|5 zliHTHA-1Sv{kFmJj(1Fu@s4GKjQ;brrlD!shTh3U8{3=8sza-Ed7qZvdM8hH?XjYu_=*4Vh7qQaIu6iSyn-y7jGFLnTs$<@u+TB#W`oa+A6W|06H zaB)D4mEE67%l5IHAMIFP;(qK;dthvirDBuoPJ5MNVc*p$cuY@ zcp>1CpBM1bKvxVx7mxK^$BIZ*ZWufI4(xX8qY`XEjX&`q)=#5_iO~<@g@TK59rCk zc7c%}wBw5((cZsjzYBu9YjE<;YGt!#peH>t+P&Zmljp0G%?1)?>Cyvc7t~u8ey(A} zawwj26=T2oZ%=)$o%8Z2rgNWoXglOVa>` z_HNK9&1*BwV|Lp%d;c%IPcK2|)*bR%!vl_R;WH;q%J>S(rlhCFzRcs3@6Tq2Rd3tO z<97=(ec0!j{tio@q$&hHoL#fv)%^oY^;36gKX~@!%y)5PJ>YOoTIfBi*nl*6}f=`RHFkv#bQUROVdtNeNT`3e1$5jIWwgAow$Hq_pzsC z*FngN9@m3Kr&}Kx!nrO#jOSF*;Z4u`nQ!{2RA(?>H&c8QlD(M^VPV@suvX`Z;i4ej zX}3CfK7?6g@atEC5!*i{W*U!+TuxDSL6)gVgWMZm8gtH!%1jlh$uHKSFb({LN+5bHBITtg1mYx0O>`dW zB2LxmBG+i*#?i}%B$A}=r7V8{PZudIxUA#dgCeR61~a3(dbZlRf1Z+E;KzOf zGvyCP*t&K#GES_5H*TfT$i+X>VOU6xx66088%yldIAf1;)&&ybAQi%~xB~-?5O^&DqdjPhdH| zoci_}Wd_``ifr&K5FH3u^oxci{mk3LgBeKQpG~r!W+_z1ZqI-1U0Dy9RV3_h6}tg= zqrCs*$6LeU`5}+h>&RY=U3d~6r+@kRjUc4w(Er%yD&}u)NJeEz~$#W;0Kl@7&r7i>R_Fd{ffH?%#Eq+k32+%fi6@l7@ za&%%?vLFDF1k(sz693)D$ql8Uq*l&G2l=J2gF^u7htre9T>A)`sM|skuKHgjUWtsw zrj#ZZdLqtwl~1$r4XLV71tJKskx4fsVOLr-Q!HZYJ$$T-O8bnv z1v^ZMKi?+*`{;&Nh{&$3p;DkFQAMY`V>3YbPN03cmJYWr$`EB)r~zm0=)yu*2bUQh zJ@IIa*@nW}JXZI+JGU~#R&xlJD?Xgd=RMSRE^!7LH8;E@a-SjdIjCJckC*PI&#lVG2WN+an?|6cP{shV1$Kg{EAl8-WpR4G9$xB>^ zdFwRJ1Lrgh=x6|w4n{VLOX91sC?N`^tcIWy274^k`%locSBBo+Sr?VOz$QNSKQ z^y6b9w9ek!S>j@K(@VoKK(9nT2TeEBUT?}G?B2&{ z`BjGV9cl%i;2NF>XYu&S&gPlzRAjI=dz3E<2nh-2IT3|+Ti3R&k(;Kme()v$-2h(f zTOi^6K|}9g9rh?%{6yX5QJqhfo5Ua0>CZTUrpdhOe-|eIi{!cw<%KVjwt66G1Nuyi zXJEt-keOWx267Eq+w<3?;6QX*f7W0J@{xB5=Ly{{aIQKKnc0En%zNF84&4_`$4@&f zY{isk#fX6vFhp~}6$sSH^w^BS!V)F>KBkUWv-jTt%Rf;@dFRLHL2dIDJwYHXe2a&y z8lM65Y-=PzyutMkFQ%!YY5~a~8h1m#d_SB`Iv^B2UpICD|B;fByY^@7JvOe%*JdtG zH5W+OW?tM7d^V((1$=aMH?YUlp`mw6nzqrey}*klHU2xH0J+1TuD(RbE%h`2Qo~d9 zfIRA)q6diUoWTdA7{8&l|M50{`u{7z@Bfb;82*eQX8k8Ike5FOK)i!%_LA2C=?vU4}t`&%TfF;+vGAGqq+y#jFYUey=}$-(wQF zjBReS=4oUkt~y5xaLW9+-A+Wxn=uKPuoMkG?%09=Os_HzHn*B>%_Fh5qQ?uqm&%+4 zGfC}ZsR?-Qs zVqXB~YjpR_+~3|F2=rFv`}KADk?iN}Qs1+-&wcDyJ=1F^u$uKw;uP0P3yVp3MC|N6 zd+gkqir3Bu z$e9Lvte+7)FlHyBQ@S(M`g)RT$Nlwlt2rgXidZfwQ7zHk>#;HX zSUS1jR(Ty&ksMvoiQ{&%H5d~wiuKLAU6ryb>=R~jG})Hs=GsL!(=YDo@pHPp8956_$fM}phP2nWyh!4hFt7k-8*X;pVGkfK%`s5p z7EQ6$enonKF2~Wh+$nuXcnSS$5YL6<2e@!eH``j!5WD5$E6*$nK+TbDo8NCVo$6+v zE4%AgivNz-##hIDU2ITC$I|Sat(HaIH5qHTd%<<1bhJoZLuH-!b*A@XB=*!S3;(U^Le+~T;ulc!r=Sg~cU zX}R+edRRP5~1WZ#2NP_7PKOEthvGiWtWG7AQff4pk~8a+Fq z!te$$zN5T5D5Qw3`R>-8bA)m2L2!{zqv^pl|FLpQfHfpw_`@R3=%Xdj-|4t*KELlL zd9YZ$FugUh0vM4VGn&JPb$!2G5pR&OPh5jGBo97!NKP6YfS(|#QRYIbR16@UoGpM z4wQJX-~Ely88mssd!qQ=e#3v~t z#c1Mxd0eM|T`kC+0-YkfS&O|n2BJFNHQqTODS1W!HNHN$cew^&vx6|yfnNdvGS~6^ zJs`BCsf~Y^?koHK1Cw7Cbd{grJz88XlKg4(C17?SKpCPY=yjDorxFl=dEVvo-LU{d z*agdg09&J;3-E7%sgytPlmg&knPh-51vHYh5F|eK%F^f#6Lm-#UL^d|`=8KBZGgjpzc5DDWtDBqmD zyo?D9+?iAy`4itce5X?Ai~$a>?t-W2i?w9Ct>LX^G_CtRNl~EHbI?!`?QQ;uFU6A&Tl_dVOuj3&WzPVZv156ZzA(K!lI7 zmTH9bDJzAH&;!=8&5DQo*=H$U+mi1j8|W&*(fCbtGVU!?LQG7C>u7S zGs3Yfr8K~D-m z(L8=qEIxYC0okX_Jb_VN`~ft+_=}w8UUUYrNN-viQ2Y@qGF0d>j%O*b?Ojk56yxFJ zzxS@>-Zk52_Sqf61n+67g9Fs5v7vRPrA zgX3dPfxR}1Z=>ls0|97uMNe}IwyAVF=E;P00z_{T&gAiJRXo!>v20Maemf=y>>LRo}*|Af%zKt1LJoo|VpS>N#Dfc7bPz;LUP9f^rK-}#F!_}2w8T6|M|cJ|hJO(k7`WZyT~U8paI z(Tex>vA?r1cxQt1dnfOiz2l52I$L~*UFkciTB8GWgDq|JpTP%XW1KpfViN}UIE53f0vV~`ql7!CunU^q{cS1$Z5Wp_ zAsdyp9=Pjy!h7QSa}q_^gP`@d(nTViLt%g0+6zzw+nFDKMc zuzfK+YG$CL;q$L`O@8~Pl`Xx5MAOznz$vTigH5M;do_HrkoYew{1J`Nc9=o5b z7T|J*HV~QsJAgpA2m+~ff;EMZ&~Czt7Ma?H-2}3^hgt~;s*O=WoiRf)!6P$M15AYy z63ZOolD1KgC!ABero|H4+H1`W?Te1=ab&Z?vf?!p_sN+|s-E z(0jYP?Z`jj;N8PQi|!Hz+2lcYwEoGy6++8@_ri z4J1Y%e@y${X|UBs`Dlz42*9+%WwU|{#zS7#o_jdKNIN*!ce}@3F*>Kmuf$keUu%yw z_{DFn=ywe-C`H&h9F4<=t2|)Wt+-aN4VIxbs6Cx=w8IW#e`O+6vl|5cztEKW;HPSW%Nk}j+jlzkM;yACgkQnnN&T|IpT(;XDv)B2$ zdF8Yvk~WgIckvtO&LAbN1)OWE*I}k;w8l1WzD8nt@Z(VSjFzh3X@Y2SmyOwbI4J6g zY08TBl$xIDWrCUoFk + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DatabaseServiceInterface + + + DatabaseServiceInterface + + + + + + + + + + + + + + + + LogService + + + LogService + + + + + + + + + + + + + + + + + + + services + + + + + + + + + + instantiated + + + + + + + + + + shared + + + + + + + + + + + + __construct() + + + + + + + + + + + + add(interface, service, share) + + + + + + + + + has(interface) + + + + + + + + + get(interface) + + + + + + + + + + + + + ServiceLocator + + + ServiceLocator + + + + + + + + + + + + + + + + + + has(interface) + + + + + + + + + get(interface) + + + + + + + + + + + + + ServiceLocatorInterface + + + ServiceLocatorInterface + + + + + + + + + + + + + + + + LogServiceInterface + + + LogServiceInterface + + + + + + + + + + + + + + + + DatabaseService + + + DatabaseService + + + + + + + + + + + + +