Prototype Pattern
[en] Read in English 2023-05-26
Bir zamanlar, Yaratıcılar Ülkesi diye bir yer vardı. Bu ülkede, hızlı ve verimli bir şekilde yeni nesneler oluşturmanın bir sırrı vardı. Bu sırrın adı, “Prototype Pattern” idi.
Yaratıcılar Ülkesi’nde bir gün, sihirli bir çizim kalemi vardı. Bu kalem, her dokunduğu nesneyi kopyalayabilme yeteneğine sahipti. Bu özellik, nesnelerin yaratılmasını kolay ve hızlı bir şekilde gerçekleştiriyordu, çünkü her nesnenin sıfırdan yaratılması yerine, var olan bir nesne kopyalanıyordu.
C# dilinde bu hikaye şu şekilde uygulanır:
public interface IPrototype
{
IPrototype Clone();
}
public class ConcretePrototype : IPrototype
{
public IPrototype Clone()
{
return (IPrototype)this.MemberwiseClone(); // Shallow copy
}
}
Java dilinde aynı hikaye:
public interface Prototype {
Prototype clone();
}
public class ConcretePrototype implements Prototype {
public Prototype clone() {
try {
return (ConcretePrototype) super.clone(); // Shallow copy
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return null;
}
}
Python dilinde:
import copy
class Prototype:
def clone(self):
return copy.copy(self) # Shallow copy
Go dilinde bu hikaye:
type Cloner interface {
Clone() Cloner
}
type ConcretePrototype struct {
// ...
}
func (p *ConcretePrototype) Clone() Cloner {
out := *p // Shallow copy
return &out
}
Rust dilinde bu hikaye:
pub trait Clone {
fn clone_box(&self) -> Box<dyn Clone>;
}
#[derive(Clone)]
pub struct ConcretePrototype {
// ...
}
impl Clone for ConcretePrototype {
fn clone_box(&self) -> Box<dyn Clone> {
Box::new(self.clone()) // Shallow copy
}
}
Bu hikaye, prototip tasarım kalıbının ana fikrini ifade eder: var olan bir nesneyi kopyalamak, onu sıfırdan yaratmaktan daha hızlı ve daha verimli olabilir. Bu özellikle büyük ve karmaşık nesnelerin oluşturulması gerektiğinde veya bir nesnenin belirli bir durumu koruması gerektiğinde yararlıdır. Bu kalıp, kodun daha anlaşılır ve bakımı daha kolay hale getirebilir. Her nesne kopyalandığında, tüm özellikler ve durumlar aynı şekilde kopyalanır, bu da kodda tutarlılığı sağlar.