Bu Sayfayı Paylaş:

Kavram

Factory Tasarım Şablonu

Tanım: Bir class veya interface'i implement etmiş (türemiş) birden fazla farklı class'lardan hangisinin üretileceğine karar verip uygun nesneyi oluşturmak için kullanılan tasarım şablonu. Factory olarak kullanılan sınıf verilen bilgiye göre uygun olan class'ın nesnesini yaratır ve o nesneyi döndürür.

Örnek

Basit Bir Factory Örneği

Boş bir kurucusu olan Simple class'ı için Factory class'ı aşağıdaki gibidir : 

 

public class SimpleFactory {

	public Simple createSimple(){
		
		return new Simple();
		
	}
	
}

 

Bu factory class'ının kullanılışı aşağıdaki gibidir : 

 

public class Test {

	public static void main(String[] args) {
		
		SimpleFactory factory=new SimpleFactory();
		Simple simple=factory.createSimple();
		
	}
	
}

 

Görüldüğü gibi Simple nesnesi Factory class'ı ile üretilmiştir. 


Örnek

Factory Örneği

Aşağıdaki örnek verilen parametre değerine göre farklı class'lardan nesne yaratılıp döndürülmektedir. 

public interface Logger {}

public class TestLogger implements Logger {}

public class ProductionLogger implements Logger{}


Uygulamada TestLogger mı ProductionLogger mı kullanılacağına karar vermek için LoggerFactory class'ı kullanılır : 

 

public class LoggerFactory {

	public Logger createLogger(){
		
		// stage bilgisi konfigurasyon dosyalarından bulunur
		String stage="PRODUCTION"; // veya "TEST" olur..

		if(stage.equals("PRODUCTION")){
			return new ProductionLogger();
		}else if(stage.equals("TEST")){
			return new TestLogger();
		}else{
			throw new RuntimeException("Logger bulunamadı");
		}
		
	}
	
}

 

Kullanımı aşağıdaki gibidir : 

 

public class Test {

	public static void main(String[] args) {
		
		LoggerFactory factory=new LoggerFactory();
		Logger logger=factory.createLogger();
		
	}
	
}

 

 

 


İpucu

Factory Sınıfının Yapılması

Factory tasarımına uygun bir sınıf yapmak için bir Factory sınıfı olmalı ve bu sınıfta createXXX şeklinde bir method bulunmalıdır. createXXX.. methodu bir interface , abstract class veya class döndürebilir. create methodu aldığı parametre değerlerine göre veya çalışma anındaki konfigurasyon veya anlık durum bilgilerine göre (örneğin zaman , sistem bilgisi vs.) farklı class'lardan bir tercih yapmalı ve bulduğu class'ın nesnesini yaratıp döndürmelidir. Bu şekilde Factory class'ını kullanan nesnelerin nasıl yaratılacağı ve hangi class'tan yaratılacağı ile ilgilenmez. Aşağıda bir factory class genel yapısı bulunmaktadır. 

 

public class Factory {

	public A create****() { // burada parametre girilebilir de.

		if (kosul1) { // koşul uyuyor ise

			return new X();

		} else if (kosul2) { // koşul uyyor ise

			return new Y();

		} else if (kosul3) { // koşul uyyor ise

			return new Z();

		} else { // hiç bir koşula uymuyor ise

			return new T();

		}

	}

}

 

Burada eğer A class'ı bir interface ise  X , Y , Z , T class'ları bu interface'si implements etmiştir. Eğer abstract class veya class ise X , Y , Z , T class'ları A class'ını extend etmiş olması gerekmektedir. 





Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir