Facade

Bu yazımda size Facade adında nesneye dayalı yazılım şablonunu (Object-Oriented Design Pattern) anlatacağım. Bu şablon(pattern) genelde birden fazla pakete (package) aynı anda erişip bunlarla ilgili işlemleri yapabilmek adına tasarlanmış bir dizayndır. Demek istediğim birden fazla işlevi bir arada bulunduran işlemleri temelde daha kolaya indirgeyen bir yazılım unsurudur. Buna şöyle örnek verelim. Sizin computer adında bir sınıfınız(class) var. Düşününce computer çalışması için birden fazla parça kulanır. Biz sadece CPU, Ram ve harddisk kullandığını varsayalım. Şimdi bu saydığım parçaların her biri paket çünkü birden fazla işlevi yerine getiriyo. Mesela CPU ele alalım. Bu paketin içinde birden fazla sınıf bulunur. İşte dışarıdaki sınıfları bu kargaşadan kurtarmak için bir facade sınıfı yazarız ve bu sınıf üzerinden erişimi sağlarız. Şimdi bunu bir uml şeması ile gösterelim.

facade

public class ALU{
	public void execute(){
		//execute instructions 
	}
}
public class Latch{
	public void fetch(){
		//fetch intruction from memory
	}
}
public class Disk{
	public void data(){
		//gets data from disk
	}
}
public class Computer{
	ALU alu;Latch latch;Disk disk;
	public Computer(){
		alu = new ALU();
		latch = new Latch();
		disk = new Disk();
	}
	public void run(){
		alu.execute();
		latch.fetch();
		disk.data();
	}
}
public class User{
	public static void main(String [] args){
		Computer computer = new Computer();
		computer.run();
	}
}

Adapter

Bu yazımda size Adapter adında nesneye dayalı yazılım şablonunu (Object-Oriented Design Pattern) anlatacağım. Bu yazılım şablonu genellikle daha önce yazılan bir kodun başka bir programa entegre olmasını sağlamak amaçlı yapılır. Aslında adından da anlaşılacağı üzere adaptör özelliğine sahiptir. Bunu şöyle açıklayalım. Siz bir program yazdınız, sonra başka bir yerde koda ihtiyacınız oldu. Bunu da bir yerlerden buldunuz. Ama şöyle bir sıkıntı oluştu sizin yazdığınız ara yüze(interface) bulduğunuz kod uyumlu değil. Siz bu noktada hemen araya bir adaptör sınıfı yazıyorsunuz. Bu iki nesneyi biri birine uyumlu hale getiriyorsunuz. Bir başka kullanımı da sizin birden fazla entegre sınıfa ihtiyacınız var ve siz bu sınıfların ortak metotlara dayalı çalışsın istiyorsunuz. İşte bu noktada tek bir ara yüze dayalı birden fazla sınıf yazabilirsiniz.adapter

public class User{
	public static void main(String [] args){
		Adapter a = new Adapter();
		a.doThis();
	}
}
public interface Target{
	public void doThis();
}
public class Adapter extends Adaptee implements Target{
	public void doThis(){
		super.doThat();
	}
}
public class Adaptee{
	public void doThat(){
		System.out.println("Hello world!");
	}
}

Abstract Factory

Bu yazımda size Abstract Factory adında nesneye dayalı yazılım şablonunu (Object-Oriented Design Pattern) anlatacağım. Abstract Factory şablonu genelde aynı sınıf üzerinde ileride kod değiştirmemek için yapılır. Çünkü bu tür yazılımlarda amaç diğer kodla tekrar uğraşmamaktır. Bunu şöyle açıklayayım. Mesela siz bir telefon üzerine yazılım yapıyorsunuz. Ama bu telefonun değişik bir versiyonu çıktı ve bunun işlevsel özellikleri de diğerinden farklı. Siz bu noktada bu iki telefonu da ela alan bir sınıf yazmış olmanız gerekli yada siz öyle yazarsınız ki bu yazılımı hemen sadece bu telefon için kullanacağınız ortak metotları olan bir sınıf yaratırsınız. Demek istediğim bu yeni telefonu yaratacak başka bir sınıf yazarsınız ve sisteme bu şekilde eklersiniz yeni gelen telefonu. Bu şekilde yeni telefonun işlevsel özelliklerini diğer sınıfa hiç dokunmadan hayata geçirmiş olursunuz. Bunu kullanan sınıflar da metotlar ortak olduğu için uyumluluk sorunu göstermez.

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();
	}
}
 Sayfa: 1 | Toplam: 11  1  2  3  4  5 » ...  Last »