Skip to content

Abstract Factory

Bu yazımda size Abstract Factory adındaki nesneye dayalı yazılım şablonunu (Object-Oriented Design Pattern) anlatacağım. Abstract factory,  bir veya birden fazla nesnenin farklı türlerinin, ihtiyaca göre yaratılmasını amaçlayan tasarım şablonudur. Örnek vererek daha iyi açıklamak istiyorum. Bir çok farklı türde telefon mevcut ve buda hepsinin kendine has platformu olmasına neden oluyor. Dolayısıyla  telefon için bir uygulama geliştirdiğimizde, yaptığımız bir düğme(button) yada bir panel ortama göre değişmesi gerekecektir. Bu durumda düğmeleri Button, çeşitlerinide Button’dan türeyen düğmeler şeklinde tasarlarız. Aynı işlemleri paneller içinde yaparız. Oluşturacağımız AbstractFactory’den türeyen sınıfları ise platforma göre çeşitlendiririz. Eğer bizden Android buttonı isternirse, dolayısıyla Android düğmesini AndroidFactory’den yararlanarak yaratabiliriz. Aynı şekilde bunu Android Panel içinde yapabiliriz. Eğer yeni bir platform gerekirse tek yapmamız gereken onun factorisini oluşturup, ona ait button ve panelleri eklemek olacaktır. Yazdığımız diğer sınıflar aynen kalabilir.

abstract-factory

public abstract class ProductA{}
public class ProductA1 extends ProductA{}
public class ProductA2 extends ProductA{}
public abstract class ProductB{}
public class ProductB1 extends ProductB{}
public class ProductB2 extends ProductB{}
public abstract class AbstractFactory{
	public ProductA getA();
	public ProductB getB();
}
public class Factory1{
	public ProductA getA(){
		return new ProductA1();
	}
	public ProductB getB(){
		return new ProductB1();
	}
}
public class Factory2{
	public ProductA getA(){
		return new ProductA2();
	}
	public ProductB getB(){
		return new ProductB2();
	}
}
public class User{
	public static void main(String []args){
		AbstractFactory factory = new Factory1();
		factory.getA();
	}
}

Oh hi there 👋 It’s nice to meet you.

Sign up to receive awesome content in your inbox, every month.

We don’t spam!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.