Gerçek dünya senaryosu :
Yıl 3542 insanlar sonunda doğayla uyum içinde yaşamayı başarmış ve bitkisel insanlar dönüşmülerdi, bitkisel insanlar ataların yarattığı Dark Whether'a karşı savaşmakta ama sayıca yetersiz kalmaktadır. Bitkisel İnsanlar aralarınadaki en iyi savaşçının klonlamak istiyorlar. Bu yüzden ellerinde en iyi savaşçıyı prototip olarak kullanmak istiyecekler.
Prototip olarak kullandıkları savaşçıdan birebir aynı savaşçı klonlamak istiyecekler.
Basitçe :
Prototip tasarım kalıbı eldeki nesne ile benzer bir nesne yaratmak için kullanılır.
public class SavasciPrototype
{
internal int Can { get; set; }
internal int Zeka { get; set; }
internal int Guc { get; set; }
internal int FotosentezMiktari { get; set; }
public SavasciPrototype()
{
}
public static SavasciPrototype Initialize(int can, int zeka, int guc, int fotosentezMiktari)
{
var savasci = new SavasciPrototype();
savasci.Can = can;
savasci.Zeka= zeka;
savasci.Guc = guc;
savasci.FotosentezMiktari = fotosentezMiktari;
return savasci;
}
private static SavasciPrototype _bestWarrior = Initialize(int.MaxValue,int.MaxValue,int.MaxValue,int.MaxValue);
private static SavasciPrototype _normalWarrior = Initialize(int.MaxValue/2,int.MaxValue/2,int.MaxValue/2,int.MaxValue/2);
private static SavasciPrototype _badWarrior = Initialize(int.MaxValue/4,int.MaxValue/4,int.MaxValue/4,int.MaxValue/4);
public void OzellikYazdir(string cloneName)
{
System.Console.WriteLine(cloneName);
System.Console.WriteLine("{0} Guc : " + this.Guc, cloneName);
System.Console.WriteLine("{0} Can : " + this.Can, cloneName);
System.Console.WriteLine("{0} Zeka : " + this.Zeka, cloneName);
System.Console.WriteLine("{0} Zeka : " + this.FotosentezMiktari, cloneName);
System.Console.WriteLine("----------------------");
}
private SavasciPrototype Clone()
{
return (SavasciPrototype) this.MemberwiseClone();
}
public SavasciPrototype CloneBestWarrior()
{
return _bestWarrior.Clone();
}
public SavasciPrototype CloneNnormalWarrior()
{
return _normalWarrior.Clone();
}
public SavasciPrototype CloneBadWarrior()
{
return _badWarrior.Clone();
}
}
Kullanımı :
SavasciPrototype savasci = new SavasciPrototype();
var clone1 = savasci.CloneBestWarrior();
clone1.Can =0 ; // öldü
clone1.OzellikYazdir("clone1");
var clone2 = savasci.CloneBestWarrior();
clone2.Guc = 0; // silahını düşürdü
clone2.OzellikYazdir("clone2");
var clone3 = savasci.CloneBestWarrior();
clone3.FotosentezMiktari = 0; // gereksiz insan, carbon notr
clone3.OzellikYazdir("clone3");
Ne zaman kullanılmalı ?
Bir obje yaratmak istediğimizde eğer var olan genel(general) bir statü'den türetilmek istenirse, var olan bir objeyi klonlamak bizi ekstra efordan kurtatır. Aynı zamanda objeyi yaratmanın var olan obje klonlamak daha maliyetli olduğunda da prototip kalıbı kullanılabilir.