Factory – Tasarım Kalıpları

Merhabalar, bu yazımızda Factory tasarım kalıbına değineceğim. Evet isminden de anlaşılacağı gibi nesne üretmeye yarayan bu tasarım kalıbı, Yaratıcı Tasarım Kalıplarından en çok kullanılanlarından biridir.Factory ‘nin Abstract Factory , Factory Method, Builder gibi tasarım kalıplarıyla benzerlik gösterir. Örneğim Factory Method tasarım kalıbını kullanarak yapacağım.

Senaryomuz şöyle olacak, Factory sınıfına vereceğimiz tipe göre bize İşletim Sistemi nesnesini versin ve elimizdeki işletim sisteminin önce açıp sonra kapatalım. Öncelikle bir IOperatingSystem adında interface ‘imiz olacak ve bu sınıfın gövdesi olmayan metodları yer alacak.(Java 8 ile interface’lerde metodlara başında default anahtar kelimesini koyarak gövdesini yazabilirsiniz.) Daha sonra bu interface’imizi implemente eden gerçek işletim sistemi sınıfları olacak. OperatingSystemFactory sınıfı ile de vereceğimiz tipe göre işletim sistemimizi yaratacağız. Şimdi biraz kodları görelim 🙂

IOperatingSystem.java

public interface IOperatingSystem {

    void start();

    void shutdown();

    void writeOperatingSystemName();
}

Ardından işletim sistemi sınıflarımızı kodlayalım.

Ubuntu.java

public class Ubuntu implements IOperatingSystem {
    @Override
    public void start() {
        System.out.println("Ubuntu started!");
    }

    @Override
    public void shutdown() {
        System.out.println("Ubuntu shutdown!");
    }

    @Override
    public void writeOperatingSystemName() {
        System.out.println("Ubuntu - Linux is the best OS");
    }
}

Windows.java

public class Windows implements IOperatingSystem {
    @Override
    public void start() {
        System.out.println("Windows started!");
    }

    @Override
    public void shutdown() {
        System.out.println("Windows shutdown!");
    }

    @Override
    public void writeOperatingSystemName() {
        System.out.println("Windows");
    }
}

Ardından Factory sınıfımızı ekliyoruz.

OperatingSystemFactory.java

public class OperatingSystemFactory {

    public static IOperatingSystem create(final String type) {
        if (type.equals("UBUNTU")) {
            return new Ubuntu();
        } else if (type.equals("WINDOWS")) {
            return new Windows();
        } else {
            throw new RuntimeException("Operating System not found!");
        }
    }

}

Ve son olarak Main sınıfımızda İşletim Sınıfımızı yaratalım.

Main.java

import com.patterns.factorymethod.IOperatingSystem;
import com.patterns.factorymethod.OperatingSystemFactory;

public class Main {

    public static void main(String[] args) {
        IOperatingSystem operatingSystem = OperatingSystemFactory.create("UBUNTU");
        operatingSystem.start();
        operatingSystem.shutdown();
        operatingSystem.writeOperatingSystemName();
    }
}

Çıktı:
Ubuntu started!
Ubuntu shutdown!
Ubuntu – Linux is the best OS

Evet görüldüğü gibi Factory sınıfımıza tip vererek istediğimiz İşletim Sınıfı nesnemizi yarattık ve metotlarını kullandık. Artık kurduğumuz bu sisteme yeni bir İşletim Sınıfı eklemek daha kolay ve hızlı olacak.

Şimdilik bu kadar görüşmek üzere…

Bir fıkra hatırlıyorum. Adam doktora gider. Kederli olduğunu söyler. Hayat onun için zor ve zalimdir. Tehtitkâr bir dünyada kendini yapayanlız hissettiğini söyler. Doktor tedavisi basit der. Büyük palyaço Pagliacci şehrimize geldi. Git onu gör seni neşelendirir. Adam göz yaşlarına boğulur. Ama doktor der Pagliacci benim zaten.(Watchmen 2009)

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