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