Прототип (шаблон проєктування): відмінності між версіями
[очікує на перевірку] | [очікує на перевірку] |
Вилучено вміст Додано вміст
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>
}}
|