Шаблон проектирования "Прототип" (Prototype) относится к производящим шаблонам. Он позволяет создавать новые объекты посредством копирования существующих экземпляров. Данный шаблон позволяет упростить процесс создания объектов и скрыть детали при создании. Например, есть объект, который содержит множество атрибутов. Для создания его нам нужно вызвать конструктор и установить начальные значения полей. Это сложно для клиента - гораздо проще вызвать метод без параметров, который вернет новый объект-копию текущего. Еще паттерн "Прототип" позволяет скрывать от клиента тип объекта, который реально создаётся.
Диаграмма работы паттерна "Прототип"
Например есть объект, который содержит сведения об организации.
//задаем интерфейс копирования объекта interface Copyable{ Firm Copy(); }
//класс реализующий паттерн "прототип" реализует интерфейс клонирования class Firm implements Copyable {
//название организации private String FirmName; public String GetFirmName(){return FirmName;}; public void SetFirmName(String FirmName){this.FirmName = FirmName;};
//адрес организации private String FirmAddress; public String GetFirmAddress(){return FirmAddress;}; public void SetFirmAddress(String FirmAddress){this.FirmAddress = FirmAddress;};
//Разсчетный счет организации private String FirmPaymentAccount; public String GetFirmPaymentAccount(){return FirmPaymentAccount;}; public void SetFirmPaymentAccount(String FirmPaymentAccount){this.FirmPaymentAccount = FirmPaymentAccount;};
//конструктор по умолчанию Firm(){ FirmName = "Не указан"; FirmAddress = "Не указан"; FirmPaymentAccount = "Не указан"; }
//конструктор копирования Firm(String Name, String Address, String PaymentAccount){ this.FirmName = Name; this.FirmAddress = Address; this.FirmPaymentAccount = PaymentAccount; }
@Override public Firm Copy() { return new Firm(this.FirmName, this.FirmAddress, this.FirmPaymentAccount); }
@Override public String toString(){return this.FirmName + " " + this.FirmAddress + " " + this.FirmPaymentAccount;} } Код клиента:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { Firm f1 = new Firm("ООО Рога и Копыта", "г. Рыбинск", "1111-222-333"); jTextArea1.append(f1.toString() + "\n"); //используем копирование Firm f2 = f1.Copy(); jTextArea1.append(f2.toString() + "\n"); f2.SetFirmAddress("г. Ярославль"); jTextArea1.append(f2.toString() + "\n"); }
|