Radoslav Popov



За създаване на проекта съм използвал следните шаблони:

  1. Bridge
    Използва се за разделяне на имплементацията на различните видове контроли (web и windows) от тяхната презентация. По този начин се улеснява разшираването на дървото с контроли, а общата функционалност за всичките контроли (независимо от типа им – web или windows), се капсулира в суперкласа на различните имплементации. Част от този шаблон са класовете ControlImplementation, WebControlImplementation и WindowsControlImplementation, които се грижат за функционалността, както и DDControl, DDContainer, DDInput, DDTextarea, DDPattern и DDRegistrationForm, които представляват презентацията на контролите (или шаблоните). Класовете DDInput, DDTextarea и DDRegistrationForm са просто примерни за целите на тестването.
  2. Composite
    Използва се, понеже шаблоните имат сходен модел на работа като контролите. Всички контроли наследяват директно класа DDControl, докато всички шаблони наследяват абстрактния клас DDPattern, който от своя страна е наследник на DDControl. Клиентът работи с шаблон по същия начин, по който работи с контрола, но има лека разлика в поведението вътре в класовете.
  3. Command
    Използва се за най-елегантно имплементиране на undo и redo операциите в произволна дълбочина. Част от този шаблон са интерфейсът Command, неговите наследници AddControlInsideControlCommand, AddControlInsidePatternCommand, AddPatternInsideControlCommand и AddPatternInsidePatternCommand, както и класът CommandManager.
  4. Memento
    Използва се за операциите save и load. Конкретната имплементация е с HashMap, което лесно може да се промени. Част от този шаблон са класовете Memento и MemoryCaretaker.
  5. Prototype
    Използва се, за да се копира контрола, заедно с всички нейни вложени контроли, и да се използва в проекта. Класът, който имплементира шаблона, е ControlCloner.
  6. Singleton
    Проектът, който клиентът създава, е един – инстанция на класа DevDesignerProject.