Прототип (шаблон проектирования)

Материал из Seo Wiki - Поисковая Оптимизация и Программирование
Перейти к навигацииПерейти к поиску

Прототип, (англ. Prototype)порождающий шаблон проектирования.

Назначение

Задаёт виды создаваемых объектов с помощью экземпляра-прототипа и создаёт новые объекты путём копирования этого прототипа...

Проще говоря, это паттерн создания объекта через клонирование другого объекта вместо создания через конструктор.

Применимость

Паттерн используется чтобы:

  • избежать дополнительных усилий по созданию объекта стандартным путем (имеется ввиду использование ключевого слова 'new', когда создается не только сам объект, а и вся иерархия предков объекта), когда это непозволительно дорого для приложения.
  • избежать наследования создателя объекта (object creator) в клиентском приложении, как это делает паттерн abstract factory.

Используйте этот шаблон проектирования, когда система не должна зависеть от того, как в ней создаются, компонуются и представляются продукты:

  • инстанцируемые классы определяются во время выполнения, например с помощью динамической загрузки;
  • для того чтобы избежать построения иерархий классов или фабрик, параллельных иерархии классов продуктов;
  • экземпляры класса могут находиться в одном из нескольких различных состояний. Может оказаться удобнее установить соответствующее число прототипов и клонировать их, а не инстанцировать каждый раз класс вручную в подходящем состоянии.
Файл:Prototype.gif

Примеры

Пример Java

<source lang="java"> /**

* Prototype Class
*/

public class Cookie implements Cloneable {

   @Override
   public Cookie clone() throws CloneNotSupportedException {
       // call Object.clone()
       Cookie copy = (Cookie) super.clone();
       //In an actual implementation of this pattern you might now change references to
       //the expensive to produce parts from the copies that are held inside the prototype.
       return copy;
   }

} </source> <source lang="java"> /**

* Concrete Prototypes to clone
*/

public class CoconutCookie extends Cookie { } </source> <source lang="java"> /**

* Client Class
*/

public class CookieMachine {

   private Cookie cookie; // Could have been a private Cloneable cookie.
   public CookieMachine(Cookie cookie) {
       this.cookie = cookie;
   }
   public Cookie makeCookie() {
       return (Cookie) this.cookie.clone();
   }
   public static void main(String args[]) {
       Cookie tempCookie = null;
       Cookie prot = new CoconutCookie();
       CookieMachine cm = new CookieMachine(prot);
       for (int i = 0; i < 100; i++)
           tempCookie = cm.makeCookie();
   }

} </source>


Пример C#

<source lang="csharp">

using System;

namespace Prototype
{  
 class MainApp
 {    
   static void Main()
   {
     // Create two instances and clone each

     ConcretePrototype1 p1 = new ConcretePrototype1("I");
     ConcretePrototype1 c1 = (ConcretePrototype1)p1.Clone();
     Console.WriteLine ("Cloned: {0}", c1.Id);

     ConcretePrototype2 p2 = new ConcretePrototype2("II");
     ConcretePrototype2 c2 = (ConcretePrototype2)p2.Clone();
     Console.WriteLine ("Cloned: {0}", c2.Id);

     // Wait for user
     Console.Read();
   }
 }

 // "Prototype"

 abstract class Prototype
 {
   private string id;

   // Constructor
   public Prototype(string id)
   {
     this.id = id;
   }

   // Property
   public string Id
   {
     get{ return id; }
   }

   public abstract Prototype Clone();
 }

 // "ConcretePrototype1"

 class ConcretePrototype1 : Prototype
 {
   // Constructor
   public ConcretePrototype1(string id) : base(id)
   {
   }

   public override Prototype Clone()
   {
     // Shallow copy
     return (Prototype)this.MemberwiseClone();
   }
 }

 // "ConcretePrototype2"

 class ConcretePrototype2 : Prototype
 {
   // Constructor
   public ConcretePrototype2(string id) : base(id)
   {
   }

   public override Prototype Clone()
   {
     // Shallow copy
     return (Prototype)this.MemberwiseClone();
   }
 }
}

</source>

См. также


порождающие шаблоны проектирования
абстрактная фабрика | строитель | фабричный метод | прототип | одиночка | отложенная инициализация

bg:Прототип (шаблон) ca:Prototype de:Prototyp (Entwurfsmuster) en:Prototype pattern es:Prototype (patrón de diseño) fr:Prototype (patron de conception) he:תבנית Prototype it:Prototype pattern ko:Prototype 패턴 pl:Prototyp (wzorzec projektowy) pt:Prototype uk:Прототип (шаблон проектування) zh:原型模式

Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....