Дизайн модели в Ява

Сигурен съм, че всеки програмист чували фразата "дизайнерски модели" (или модели). Ако съвсем накратко - описание на проблемите, които възникват, когато пишете обектно-ориентиран код, както и примери за решения на тези проблеми.

Но, както някой мъдър каза: - модели, необходими за подпомагане реализират една идея, а не за да се вмести в рамките на идеята за определен модел.

Надявам се, че моята поредица от статии ще ви помогне да се разхладите в използването на модели и по този начин се разширява познанията им за освобождение на Палестина.

Като основа вземем каталог на модели от книгата на GOF - Design Patterns. И тогава как ще върви :).

Във всяка статия, аз ще се опитам:

  • обясни защо даден модел се нуждае;
  • дам един пример за използването му, доколкото е възможно, от действителните Java проекти, в които участвах;
  • разкажа за характеристиките, митовете и капани;
  • посочите къде да се намери модела в изпълнението на JDK.

Модели създават обекти

Първата група - това е творческия модели. Те са в различна степен, работим с механизмите на създаване на обекти.

  • Singleton - да осигури наличието на системата точно една инстанция на класа;
  • Фабрика Метод - възлага на процеса на създаване на обекти, получени клас;
  • Prototype - клонинг обекти въз основа на база обект;
  • Builder - разделяне на процеса на създаване на комплекс само от неговото представяне;
  • Abstract Factory - да се опише същността, за да създадете цели семейства от свързани обекти.

структурни модели

Втората група - структурни модели (структурни). Те описват създаването на по-сложни обекти, или да го направи по-лесно да се работи с други предмети, рециркулация.

  • Адаптер - въз основа на един клас да се създаде необходимия интерфейс на клиентската програма;
  • Фасада - описване на единен интерфейс за лесна работа с набор от под-системи;
  • Composite - работи с основата и съставни обекти в единна начин;
  • Декоратор - динамично добавяне на нова функционалност към определен обект, запазвайки своя интерфейс;
  • Proxy - създаде обект, който приема повиквания към друг обект;
  • Bridge - ние споделяме черпене на интерфейса, което им позволява да се променя независимо;
  • Flyweight - работи ефективно с по-голям брой подобни обекти.

Поведенческите модели дизайн

И накрая, третата група - поведенческите модели (поведенчески). Те се определят ефективни начини за взаимодействие на различни обекти в системата.

  • Стратегия - описва набор от сменяеми алгоритми с единен интерфейс;
  • Итераторът - осигуряване на достъп до колекции от предмети, без да се излага на вътрешната структура на тези колекции;
  • Наблюдател - създаде обект за проследяване на промените в подсистемата за уведомяване и други подсистеми;
  • Memento - дръжте вътрешното състояние на обекта за по-нататъшна употреба, без да нарушават капсулиране;
  • Команда - описват обект представлява действие, което може да се извърши в желания момент;
  • Преводач - определяне на методиката за изчисляване на изрази на езика;
  • Посредник - създаде обект, който контролира взаимодействие между набор от подсистеми;
  • Членка - позволява обекти, за да променят поведението си при смяна на вътрешното си състояние;
  • метод Шаблон - ние описваме алгоритъм определяне на прилагането на някои части на алгоритъма на подкласове;
  • Visitor - разглобяема от структурата на алгоритъма, който алгоритъм работи;
  • Верига на отговорност - пропуснете някои заявки чрез набор от обработват събитие, докато молбата е била обработена.

antipattern дизайн

Мисля, че е важно да се знае не само добър начин за решаване на проблемите, но и грешки в решаването им.

  • константи за интерфейс - използва Java интерфейс за други цели;
  • Vresennaya сложност - добавяне на ненужни лица в йерархията на класа.

Смята се, че е необходимо за някои от моделите, причинени от липсата на конкретен език за програмиране. Може би това е така, но тъй като ние сме с помощта на езика не предоставя родния начин за решаване на проблема, тогава защо да не се идеята, че някой вече е тествана и е значително по-ефективен, ако не е оптимално.