На главную Содержание
Позволяет создавать новые объекты с помощью клонирования некоторого
объекта, который задается в качестве прототипа. Клонирование происходит
путем создания динамической копии прототипа. Цель использования шаблона
- скрыть от клиента конкретные классы, чтобы уменьшить число известных
ему имен. Тем самым облегчается модернизация отдельных частей системы.
Схема взаимодействия классов в приведенной ниже реализации:
Реализация на C++
//интерфейс для клонирования самого себя class AbstractPrototype { public: virtual AbstractPrototype* Clone() = 0; };
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();