Прототип (шаблон проєктування): відмінності між версіями

[очікує на перевірку][очікує на перевірку]
Вилучено вміст Додано вміст
Inna Z (обговорення | внесок)
Немає опису редагування
Рядок 79:
 
== Реалізація ==
 
=== Приклад С++ ===
{{Hider_hiding
| title = Приклад реалізації на мовімовою [[С++]]
| content =
<syntaxhighlight lang="cpp">
Рядок 153 ⟶ 154:
}
 
</syntaxhighlight>
}}
 
=== Приклад С# ===
{{Hider_hiding
| title = Приклад реалізації мовою [[C Sharp|С#]]
| content =
<syntaxhighlight lang="csharp">
using System;
using System.IO;
using System.Drawing;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters.Binary;
 
namespace PrototypePattern
{
static class Prototype
{
public static T DeepCopy<T>(this T self)
{
var formatter = new BinaryFormatter();
 
using (var memoryStream = new MemoryStream())
{
formatter.Serialize(memoryStream, self);
memoryStream.Seek(0, SeekOrigin.Begin);
 
var clone = formatter.Deserialize(memoryStream);
return (T)clone;
}
 
}
}
 
[Serializable]
class TreePrefab
{
private int _height;
private Color _color;
 
public TreePrefab(int height, Color color)
{
_height = height;
_color = color;
}
 
public void SetColor(Color color)
{
_color = color;
}
}
 
class Program
{
static void Main(string[] args)
{
var treePrefab = new TreePrefab(2, Color.Green);
 
var forest = new List<TreePrefab>();
for (int i = 0; i < 10; i++)
{
var tree = treePrefab.DeepCopy();
tree.SetColor(i % 2 == 0 ? Color.Green : Color.YellowGreen);
 
forest.Add(tree);
}
}
}
}
</syntaxhighlight>
}}