Адаптер (Adapter) — объект, обеспечивающий взаимодействие двух других объектов, один из которых использует, а другой предоставляет несовместимый с первым интерфейс. Мост (Bridge) — структура, позволяющая изменять интерфейс обращения и интерфейс реализации класса независимо. Компоновщик (Composite) — объект, который объединяет в себе объекты, подобные ему самому. Декоратор (Decorator) — класс, расширяющий функциональность другого класса без использования наследования. Фасад (Facade) — объект, который абстрагирует работу с несколькими классами, объединяя их в единое целое. Приспособленец (Flyweight) — это объект, представляющий себя как уникальный экземпляр в разных местах программы, но по факту не являющийся таковым. Заместитель (Proxy) — объект, который является посредником между двумя другими объектами, и который реализует/ограничивает доступ к объекту, к которому обращаются через него.
Это вложенный локальный класс без имени, который разрешено декларировать в любом месте обрамляющего класса, разрешающем размещение выражений. Создание экземпляра анонимного класса происходит одновременно с его объявлением. В зависимости от местоположения анонимный класс ведет себя как статический либо как нестатический вложенный класс - в нестатическом контексте появляется окружающий его экземпляр.
Анонимные классы имеют несколько ограничений:
- Их использование разрешено только в одном месте программы - месте его создания; - Применение возможно только в том случае, если после порождения экземпляра нет необходимости на него ссылаться; - Реализует лишь методы своего интерфейса или суперкласса, т.е. не может объявлять каких-либо новых методов, так как для доступа к ним нет поименованного типа.
Анонимные классы обычно применяются для:
- Создания объекта функции (function object), например реализация интерфейса Comparator; - Создания объекта процесса (process object), такого как экземпляры классов Thread, Runnable и подобных; в статическом методе генерации; - Инициализации открытого статического поля final, которое соответствует сложному перечислению типов, когда для каждого экземпляра в перечислении требуется отдельный подкласс.