Yaratılış Modeli: Prototip
Bu makalede, prototip deseni kullanılarak mevcut nesnelerden yeni nesnelerin nasıl oluşturulabileceği anlatılmaktadır.
Bu ne?
Prototip kalıbı, mevcut bir nesneyi kopyalayarak yeni nesnelerin yaratıldığı yaratıcı bir modeldir. Kopyaları yapılan nesneye prototip denir . Nesneleri daha iyi anlamak için, prototip nesneyi diğer tüm nesnelerin yaratıldığı "tohum" olarak düşünebilirsiniz. Öyleyse neden mevcut nesneleri klonlamak yerine gerektiğinde yeni nesneler yaratmayasınız diye sorabilirsiniz. Prototip nesneler için motivasyonlar aşağıdaki gibidir:
- Bazen yeni bir nesne oluşturmak, mevcut olanı kopyalamaktan daha pahalıdır.
- Bir sınıfın yapıcısına statik olarak erişemediğinizi ve çalışma zamanı ortamının dinamik olarak yüklenen her sınıfın bir örneğini oluşturmak zorunda olduğunu düşünün. Bunun yerine uygulama, prototiplerin klonlarını döndürecek olan bir prototip yöneticisinden nesneler talep edebilir.
- Bir prototip örnekten klonlanmış nesnelerin değerlerini değiştirerek bir sistemdeki sınıf sayısını önemli ölçüde azaltabilirsiniz.
Sınıf diyagramı
Sınıf diyagramı aşağıdaki varlıkları içerir:
- Prototip
- Beton Prototip
- Müşteri
Prototip modelini daha iyi anlamak için bir uçak örneğini ele alalım. İlk olarak F-16'yı temsil edecek bir sınıf oluşturduk. Ancak F-16'nın bazı varyantlarının olduğunu biliyoruz. Böylece, F16'nın varyantlarının her birini temsil etmek için alt sınıflar oluşturabiliriz. Ama sonra sistemimizde birkaç alt sınıfla karşılaşacağız. Ayrıca F16 varyantlarının sadece motor tiplerine göre farklılık gösterdiğini varsayalım. O zaman bir olasılık, tek bir F16 sınıfını korumak, ancak uçağın motor tipini ayarlamak için bir yöntem eklemek olacaktır. Bu şekilde, prototip olarak tek bir F16 nesnesi oluşturabilir ve onu çeşitli uçak versiyonları için klonlayabiliriz.
Öncelikle bir interface oluşturuyoruz.
F-16 sınıfı, arayüzünü şu şekilde uygular:
Müşteri kalıbı şu şekilde kullanabilir:
IAircraftPrototype arabiriminin klonlama yönteminin soyut bir tür döndürdüğünü unutmayın . İstemciler, aynı arayüzün hangi farklı uygulamalarının somut alt sınıflar yaratacağını bilmezler. Örneğin, Boeing747 sınıfı, hangi prototipin (bir F16 veya bir Boeing747) geçilirse kopyalarını üreterek geçirilebilir. Prototip nesnelerin davranışları alt parçalarla birleştirilerek değiştirilebildiğinden, prototip deseni alt sınıflandırmayı ortadan kaldırmaya yardımcı olur.
Sığ ve Derin Kopya
Prototip modeli, bir clone() yöntemini uygulamak için prototip sınıfı veya arayüzü gerektirir. Klonlama sığ veya derin olabilir. Örneğin, F-16 sınıfımızın sığ bir kopyada F16Engine türünde bir üye nesnesi varsa , klonlanan nesne prototiple aynı F16Engine nesnesine işaret eder. Ancak derin bir kopyada, klonlanan nesne, motor nesnesinin ve içindeki tüm nesnelerin kopyasını alır. Prototip ve klonu arasında iç içe veya başka şekilde herhangi bir alan paylaşımı olmayacaktır.
Dinamik Yükleme
Prototip kalıbı, sınıfların dinamik olarak yüklenmesini kolaylaştırabilir. Dinamik yükleme, bir sınıfı derleme zamanında kullanılabilir hale getirmek yerine çalışma zamanında yüklemenize olanak tanır. Dinamik yüklemeyi destekleyen bir dilde, bir çerçeve, yüklenen sınıfın bir örneğini oluşturur ve bunu bir yönetim varlığına kaydeder. Ardından çalışma zamanında uygulamanız bu yöneticiden size o sınıfa ait bir nesne vermesini isteyebilir.
Diğer örnekler
Java programlama dilinde, Object sınıfı bir klonlama yöntemine sahiptir. Sınıf, java.lang.Cloneable arabirimini uygular .
Uyarılar
Döngüsel referanslar nedeniyle klonlama yöntemini uygulamak zor olabilir.

![Bağlantılı Liste Nedir? [Bölüm 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































