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.



Bu gibi daha fazla gönderi...

Bileşenlerin Dansı: Composite Tasarım Kalıbı

2023-06-22 | #composite-pattern #design-patterns #structural-patterns

Bir zamanlar, bir ormanda bir ağaç vardı. Bu ağaç, yaprakları ve dalları olan karmaşık bir yapıydı. Her dalın üzerinde daha küçük dallar ve yapraklar bulunabilirdi. Ağaç, dallarını ve yapraklarını bir arada tutan bir bütün olarak çalışıyordu. Bu ağaç, Composite tasarım kalıbının bir örneğidir. Ağaç (Composite), dallar (yine Composite) ve yapraklar (Leaf) olmak üzere iki tür bileşen içerir. Hem dallar hem de yapraklar, ağaç tarafından tanınan aynı arayüzü (Component) uygular. Bu sayede ağaç, dallarını ve yapraklarını aynı şekilde işleyebilir.

Devamı 


Köprüler Kurarak Esneklik Kazanın: Bridge Tasarım Kalıbı İle Çözümlemeler ve Dört Farklı Dilde Uygulamalar

2023-06-22 | #bridge-pattern #design-patterns #structural-patterns

Bir zamanlar, iki krallık varmış. Bu krallıklar birbirlerine çok yakın olmasına rağmen, aralarında geniş ve derin bir nehir bulunuyormuş. Bu nehir, krallıkların birbirleriyle etkileşim kurmasını zorlaştırıyormuş. Bu durumu çözmek için, her iki krallık da bir köprü inşa etmeye karar vermiş. Bu köprü, iki krallık arasında iletişimi sağlayan bir arayüz olmuş. Ancak, köprünün her iki tarafında farklı yapılar ve özellikler bulunuyormuş. Bir taraf taştan, diğer taraf ise ahşaptan yapılmış. Bu durum, köprünün her iki tarafının birbirinden bağımsız olarak değiştirilebilmesini sağlamış.

Devamı 


Dekoratör Tasarım Deseni: Yazılımın Süsleyicileri

2023-06-15 | #decorator-pattern #design-patterns #structural-patterns

Bir zamanlar, bir “Component” adında bir nesne varmış. Bu nesne, belirli bir işlevi yerine getirmek için kullanılırmış. Ancak, bazen bu işlevi genişletmek veya değiştirmek gerekiyormuş. İşte bu noktada “Decorator"lar devreye giriyormuş. Decorator’lar, Component’i “süsleyen” veya genişleten nesnelerdir. Bir Decorator, bir Component’in üzerine gelir ve onun işlevini genişletir veya değiştirir. Bu, Component’in kendisini değiştirmeden, onun işlevselliğini genişletmek için kullanılır. Örneğin, bir “TextComponent” düşünün. Bu component, bir metni ekrana yazdırır. Ancak, bazen metni kalın veya italik yapmak isteyebiliriz.

Devamı 