Prototype – Tasarım Kalıpları

Merhabalar, bu yazımda Prototype Tasarım kalıbını anlatmaya çalışacağım. Bir sistemde, bir yazılımda nesne oluşturma süreçleri çok önemlidir. Zaten tasarım kalıplarının kendi içinde neden 3’e ayrıldığını ve Oluşturucu Tasarım kalıplarıyla giriş yapıldığından anlayabilirsiniz. Neyse, hele ki bu oluşacak nesneler çeşitli sebeplerden dolayı, oluşturulması uzun sürüyorsa. Bu gibi durumlarda sürekli bu nesneye ihtiyaç duyduğumuzda yeniden oluşturmak yerine, mevcut nesnenin bir klonunu alıp, set metodları ile istenilen şekilde yapılandırılabilir. İşte bu klon bir prototip’dir. Kavram olarak son derece anlaşılır ve basit:)

Bir örnek üzerinden ilerleyelim. Bilgisayar yaratmanın uzun bir işlem olduğunu düşünelim ve Cloneable arayüzünü implemente eden bir ComputerPrototype sınıfımız olsun.

ComputerPrototype.java

public abstract class ComputerPrototype implements Cloneable{
    private int ramSize;
    private int graphicCardSize;
    private double cpu;

    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    public void showComputer() {
        System.out.println("Ram : " + getRamSize());
        System.out.println("Graphic Card : " + getGraphicCardSize());
        System.out.println("CPU : " + getCpu());
    }

    public int getRamSize() {
        return ramSize;
    }

    public void setRamSize(int ramSize) {
        this.ramSize = ramSize;
    }

    public int getGraphicCardSize() {
        return graphicCardSize;
    }

    public void setGraphicCardSize(int graphicCardSize) {
        this.graphicCardSize = graphicCardSize;
    }

    public double getCpu() {
        return cpu;
    }

    public void setCpu(double cpu) {
        this.cpu = cpu;
    }
}

Evet, basit olarak bu sınıfımızda ram, gpu ve cpu ile ilgili bilgiler set ediliyor. Burada önemli olan nokta clone metodur. Ardından Computer sınıfımızı oluşturalım. Bu sınıf ComputerPrototype’ı extend edecek.

Computer.java

public class Computer extends ComputerPrototype {

    public Computer(int ramSize, int gpuSize, double cpu) {
        setCpu(cpu);
        setGraphicCardSize(gpuSize);
        setRamSize(ramSize);
    }
}

Görüldüğü gibi parent’ının set metodları çağrılarak Computer oluşturuluyor. İstersek ComputerPrototype ‘ı extend eden farklı özelliklere sahip olan sınıflarda yaratabiliriz. Şimdi gelelim Main sınıfımıza.

Main.java

public class Main {

    public static void main(String[] args) throws CloneNotSupportedException {
        Computer computer = new Computer(8,2,2.2);
        computer.showComputer();

        Computer computer2 = (Computer) computer.clone();
        computer2.setGraphicCardSize(4);
        computer2.setCpu(3.0);
        computer2.showComputer();
    }
}

İlk olarak computer nesnesini yarattık ve özelliklerini gösterdik, ardından clone metodunu kullanarak computer2 nesnemize atadık, set metodlarıyla computer2 nesnemizi şekillendirdik ve özelliklerini showComputer metoduyla ekrana yazdırmış olduk. Basit anlamda Prototype Tasarım kalıbının kullanımı bu şekildedir.

Gerçek ve büyük sistemlerde bir nesnenin yaratma maliyeti çok yüksekse Prototype tercih edilebilir.

Bir yazının daha sonuna geldik böylece 🙂

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s