ПредишенСледващото


Шаблоните в Делфи

Модели в DelphiShablony програмиране (Design Patterns) - обикновено се използват в процеса на програмиране структура, зависимости и комуникация в обектно-ориентиран дизайн. Знаейки как да правилно и най-полезни шаблони могат да ви помогнат да се изработи вашата кандидатура по-добре да се използва по-компактен, структуриран код повторна употреба. Също така, това ще допринесе за развитието на големи и сложни системи.

Delphi - обектно-ориентиран език, в който има набор от класове (обекти) и някои зависимости, които вече са изпълнени и са готови за използване, което помага да се опрости и улесни развитието на приложения. Но най-важното връзката с оглед на шаблоните, обект на модела са: клас наследяване, виртуални (виртуални) и abstratknye (абстрактни) методи, чрез защитена (защитен) и обществени (публични) определения метод. Всичко това ви позволява да създадете програмиране шаблони, които могат да се използват многократно и лесно разширяване на техните възможности. Също като всяка обектно ориентиран език, Delphi позволява да се подобри функционалността и стабилността на модели от изолиране на основните свойства и методи на техните партньори, които могат да бъдат предмет на модификация.
И най-простият пример - по себе си е Делфи, разтегателен среда за разработка, благодарение на своите пакети архитектура, среда за разработка интерфейс (IDE) интерфейс и инструменти (инструменти). Тези интерфейси определят набор от абстрактно и виртуални конструктори и операции (методи), които са широко използвани както писмено софтуер и разширяването на самата среда за развитие (писане на неговите компоненти, майстори, експерти).
Бих искала да отбележа, че в тази статия, много от имената и определенията се предоставят "както е". Открих, че е по-удобно, отколкото се занимават с имената на превод на шаблони и други термини на български, че не винаги е възможно да се прехвърлят точно определяне на превода, но значението на термина не би искал да загуби. Така че оттук нататък всички имена на модели оставени на английски, за този въпрос, както и изходния код примери, въпреки че признавам, че може би и в други източници, различни от моите, имената и условията могат да се различават. Но нека това не озадачаващо, тъй като описанието ще стане ясно за предназначението на всеки отделен модел. Също така, изброени шаблони не твърдят, че са пълен списък на шаблони. Те просто отразяват знанията си в тази област от източниците, които са изброени по-долу.
Списък на някои често използвани шаблони (има повече от четиридесет) е представена в таблицата.

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

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

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

Разделя създаването на обект от практическото му представяне, така че един дизайнер може да създаде различни представяния на обекта.

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

Той определя интерфейс, който ви позволява да се създаде обект, но позволява на подкласове решават кои клас за изпълнение. Фабрика метод позволява клас има подкласове, т.е. потомци.

употреби
Прозорци, Съобщения, SysUtils, Уроци, графики, контроли, формуляри, диалогови прозорци;

тип
TCSingleton = клас (TComponent)
частен

защитени

обществен

конструктор Създаване (AOwner: TComponent); отменят; // пренаписани Designer
деструктор унищожи; отменят; // деструктор пренаписани

Var Global_CSingleton: TCSingleton;
Global_OSingleton: TOSingleton;

процедура регистър;
започвам
RegisterComponents ( "модели, [TCSingleton, TOSingleton]); // описани компоненти ще бъдат записани и публикувани в раздела модели.
приключи;

конструктор TCSingleton.Create (AOwner: TComponent);
започвам
ако Global_CSingleton <> нула след // проверка на уникалността на генерираните компонент
започвам
ShowMessage ( "! Компонент вече съществува Вие не можете да създадете повече от една от тези съставки. '); // ако вече съществува, а след това на потребителя се отрече създаването на друга инстанция
Прекъсване // абортирани без никакво предупреждение за грешка
край
Иначе започне
наследил Създаване (AOwner); // друго създаде обект
Global_CSingleton: = Self; // и преминават позоваване на него
приключи;
приключи;

деструктор TCSingleton.Destroy;
започвам
ако Global_CSingleton = Self тогава // ако има един обект, който трябва да бъде унищожен
Global_CSingleton: = нула; // след това унищожи
наследствено унищожи; // наричаме деструктор е външна
приключи;

конструктор TOSingleton.Create (AOwner: TComponent);
започвам
ако Global_OSingleton <> нула след това
започвам
ShowMessage ( "Обект вече съществува Вие не можете да създадете повече от един такъв обект !. ');
осуетявам
край
Иначе започне
наследил Създаване (AOwner);
Global_OSingleton: = Self;
приключи;
приключи;

деструктор TOSingleton.Destroy;
започвам
ако Global_OSingleton = Self след това
Global_OSingleton: = нула;
наследствено унищожи;
приключи;

използва SysUtils, класове;

FCustomerID: Longint;
FFirstName: низ;
FLastName: низ;
FDOB: TDateTime;

функционални GetCustomerID: Longint; виртуален;
функция GetFirstName: низ; виртуален;
функция GetLastName: низ; виртуален;
функция GetDOB: TDateTime; виртуален;

конструктор Създаване (CustID: Longint); виртуален;
имот CustomerID: Longint прочетете GetCustomerID;
имот FirstName: низ прочетете GetFirstName;
имот LastName: низ прочетете GetLastName;
имот DOB: TDateTime прочетете GetDOB;

функционира GetCustomer (CustomerID: Longint): TNewCustomer;

конструктор TNewCustomer.Create (CustID: Longint);

започвам
FCustomerID: = CustID;
FFirstName: = "A";
FLastName: = 'New_Customer;
FDOB: = А;
END;

функция TNewCustomer.GetCustomerID: Longint;

функция TNewCustomer.GetFirstName: низ;
започвам
Резултат: = FFirstName;
приключи;

функция TNewCustomer.GetLastName: низ;
започвам
Резултат: = FLastName;
приключи;

функция TNewCustomer.GetDOB: TDateTime;
започвам
Резултат: = FDOB;
приключи;

TOldDOB = рекорд
Ден: 0..31;
Месец: 1..12;
Година: 0..99;
приключи;

FCustomerID: Integer;
FName: низ;
FDOB: TOldDOB;

конструктор Създаване (CustID: Integer);
имот CustomerID: Integer прочетете FCustomerID;
Име: низ прочетете FName;
имот DOB: TOldDOB прочетете FDOB;

конструктор TOldCustomer.Create (CustID: цяло число);

започвам
FCustomerID: = CustomerID;
FName: = "An Old_Customer;
с FDOB направя започне
Ден: = 1;
Месец: = 1;
Година: = 1;
приключи;
приключи;

функционални GetCustomerID: Longint; отменят;
функция GetFirstName: низ; отменят;
функция GetLastName: низ; отменят;
функция GetDOB: TDateTime; отменят;

конструктор Създаване (CustID: Longint); отменят;
деструктор унищожи; отменят;

конструктор TAdaptedCustomer.Create (CustID: Longint);

започвам
наследил Създаване (CustID);
FOldCustomer: = TOldCustomer.Create (CustID);
приключи;

деструктор TAdaptedCustomer.Destroy;
започвам
FOldCustomer.Free;
наследствено унищожи;
приключи;

функция TAdaptedCustomer.GetCustomerID: Longint;

функция TAdaptedCustomer.GetFirstName: низ;
VAR SpacePos: цяло число;

функция TAdaptedCustomer.GetLastName: низ;
VAR SpacePos: цяло число;

функция TAdaptedCustomer.GetDOB: TDateTime;
Var FullYear: Word;

функционира GetCustomer (CustomerID: Longint): TNewCustomer;

започвам
ако CustomerID> Last_OldCustomer_In_Database след това
Резултат: = TNewCustomer.Create (CustomerID)
още
Резултати: = TAdaptedCustomer.Create (CustomerID) като TNewCustomer;
приключи;

Така съществува TAdaptedCustomer клас като слой между два други класове, като се гарантира нормална тяхното взаимодействие - преобразуване на данни във формат разбира от нов клас.
Това е един от най-простите модели. Докато пиша това, има около 40, но аз не съм толкова се разпространи и в следващата статия ще разгледаме още няколко шаблони, по-сложни, отколкото по-горе. Въпреки това, толкова по-висока сложност, толкова по-голяма полза могат да дадат на вас за използване във вашите проекти. Колкото по-бързо можете да научите как да използвате това знание за добра употреба, толкова по-лесно и по-лесно ще стане да работите програма.

Денис Migachev AKA Денвър

Свързани статии

Подкрепете проекта - споделете линка, благодаря!