Обозначения:
Свойства класса:
Методы класса:
Зависимость: 
Обобщение:
Ассоциация:
Реализация:
Подробнее об ассоциациях:
Ассоциации могут быть уточнены с помощью указания направленности, кратности, указания полюсов и других атрибутов.
Направленные ассоциации: 
Аггрегация (используется независимый класс, как часть целого):
Композиция (класс инстанциируется в использующем классе и не может использоваться самостоятельно):
Тип: по классификации GoF относится к порождающим паттернам (Creational Patterns).
Назначение: гарантирует, что у класса есть только один экземпляр и предоставляет к нему глобальную точку доступа.
Где применять:
- Должен быть только один экземпляр некоторого класса, легко доступный всем клиентам.
- Единственный экземпляр должен расширяться путём порождения подклассов и клиентам нужно иметь возможность работать с расширенным экземпляром без модификации своего кода.
Пример:

Тип: по классификации GoF относится к паттернам поведения (Behavorial Patterns).
Назначение: определяет семейство алгоритмов, инкапсулирует их, и делает взаимозаменяемыми.
Где применять:
- Имеется много родственных классов, отличающихся только поведением. Статегия позволяет сконфигурировать класс, задав одно из возможных поведений.
- Нужно иметь несколько разных вариантов алгоритма. Например, можно определить два варианта алгоритма, один из которых требудет больше времени, а другой - больше памяти. Стратегии разрешается применять, когда варианты алгоритмов реализованы в виде иерархии классов.
- В алгоритме содержатся данные, о которых клиент не должен знать. Используйте парттерн Статегия, чтобы скрыть сложные, специфичные для алгоритма структуры данных.
Пример:
Для того, чтобы быстро сгенерировать UML схему классов, можно воспользоваться ресурсом yuml.me. Пишем yml-скрипт:
[note: Диаграмма классов API{bg:cornsilk}]
[note: Контроллер в котором инициализируются все фабрики{bg:cornsilk}]-[ApiManager||-init();+run()]
[AbstractApiManager||+init()]^[ApiManager||-init();+run()]
[ApiManager||-init();+run()]-.->[ServiceFactory||+getService();+getOutput();+getError();]
Затем этот скрипт вставляем в поле формы и получается вот такая схема:

Есть так же версия для использования из командной строки. Скачать можно здесь.
Для того, чтобы установить Sphinx как расширение PHP, надо предварительно скачать и установить библиотеку и заголовки libsphinxclient, затем и сам Sphinx:
wget https://launchpadlibrarian.net/52743211/libsphinxclient-0.0.1_0.9.9-6ubuntu1%7Eev1_amd64.deb wget https://launchpadlibrarian.net/52743211/libsphinxclient-0.0.1_0.9.9-6ubuntu1%7Eev1_amd64.deb sudo dpkb -i libsphinxclient-0.0.1_0.9.9-6ubuntu1~ev1_amd64.deb libsphinxclient-dev_0.9.9-6ubuntu1~ev1_amd64.deb sudo aptitude install sphinxsearch
Сами ссылки на убунтовские пакеты нашёл по ссылке. Затем скачать из PEAR репозитория расширение и распаковать его в папку php-5.3.15/ext После этого можно приступать к сборке PHP:
cd php-5.3.15/ext wget http://pecl.php.net/get/sphinx-1.2.0.tgz tar zxf sphinx-1.2.0.tgz mv sphinx-1.2.0/ sphinx/ # Возвращаемся в корень php исходников cd ../ # Собираем и устанавливаем php ./configure --with-sphinx && make && sudo make install