Шаблон проектирования Prototype


На главную
Содержание

Позволяет создавать новые объекты с помощью клонирования некоторого объекта, который задается в качестве прототипа. Клонирование происходит путем создания динамической копии прототипа. Цель использования шаблона - скрыть от клиента конкретные классы, чтобы уменьшить число известных ему имен. Тем самым облегчается модернизация отдельных частей системы.

Схема взаимодействия классов в приведенной ниже реализации:
Классы шаблона Prototype


Реализация на C++
//интерфейс для клонирования самого себя
class AbstractPrototype {
public:
virtual AbstractPrototype* Clone() = 0;
};
//класс, реализующий операцию клонирования
class Prototype : AbstractPrototype {
public:
AbstractPrototype* Clone() {
Prototype* newObj = new Prototype();
*newObj = *this;
return newObj;
}
};
//создает новый объект, обращаясь к прототипу с запросом
//клонировать себя
class Test {
AbstractPrototype* prototype;

public:
void SetPrototype(AbstractPrototype* p) {
prototype = p;
}

void NeedToClone() {
AbstractPrototype* x;
x = prototype->Clone();
}
};
int main() {                       
Test* test = new Test();
Prototype* clientPrototype = new Prototype();
test->SetPrototype((AbstractPrototype*)clientPrototype);
test->NeedToClone();

delete test;
delete clientPrototype;
return 0;
}



Реализация на C#
//интерфейс для клонирования самого себя
abstract class AbstractPrototype {
abstract public AbstractPrototype Clone();
}
//класс, реализующий операцию клонирования
class Prototype : AbstractPrototype {
override public AbstractPrototype Clone() {
return ((AbstractPrototype)MemberwiseClone());
}
}
//создает новый объект, обращаясь к прототипу с запросом
//клонировать себя
class Test {
private AbstractPrototype prototype;

public void SetPrototype(AbstractPrototype p) {
prototype = p;
}

public void NeedToClone() {
AbstractPrototype x;
x = prototype.Clone();
}
}
public class Client {
public static int Main(string[] args) {
Test test = new Test();
Prototype clientPrototype = new Prototype();
test.SetPrototype(clientPrototype);
test.NeedToClone();

return 0;
}
}


Содержание
На главную

Rambler's Top100
Хостинг от uCoz