Factory Design Pattern
Biz bu tasarım desenini kullanmamızdaki amaç, hangi nesnenin oluşturulacağı, hangi mantıkla oluşturulacağı mantığı ile uğraşmadan, nesneyi oluşturmamıza olanak sağlamasıdır. Ortak bir arayüz kullanarak bu nesneler oluşturulur.
Implementation(Implementasyon)
‘Animal’ isimli bir Interface(arayüz) oluşturacağız ve tanımlanan sınıflarda bu arayüzü implement edeceğiz. ‘AnimalFactory isimli factory sınıfı bir sonraki adımda incelenecek.‘FactoryPatternDemo’ sınıfı yani bizim demo sınıfımız bir ‘Animal’ çağırmak için ‘AnimalFactory’ sınıfını kullanacak. Demo sınıfımız hangi nesneyi yaratmak istiyorsa(DOG/CAT/FOX),gerekli nesneyi yaratmak için, ShapeFactory sınıfına gerekli bilgileri(DOG/CAT/FOX) yollayacak.
Adım 1 :
Bir arayüz oluştur.(Animal.java)
1
2
3
|
public interface Animal {
void goes();
}
|
Adım 2:
Sınıfları oluşturup ‘Animal’ arayüzünü implement et.(Dog.java,Cat.java,Fox.java)
1
2
3
4
5
6
7
|
public class Dog implements Animal {
@Override
public void goes() {
System.out.println(“Dog goes woof!”);
}
}
|
1
2
3
4
5
6
7
|
public class Cat implements Animal {
@Override
public void goes() {
System.out.println(“Cat goes meow!”);
}
}
|
1
2
3
4
5
6
7
8
|
public class Fox implements Animal {
@Override
public void goes() {
System.out.println(“What does the fox say?”);
}
}
|
Adım 3:
Verilen bilgilere dayanarak hangi nesnenin oluşturulacağına karar veren bir Factory(Fabrika) sınıfı yazalım.(AnimalFactory.java)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public class AnimalFactory {
public Animal getAnimal(String animalType)
{
if(animalType == null){
return null;
}
if(animalType.equalsIgnoreCase(“DOG”))
{
return new Dog();
}
else if(animalType.equalsIgnoreCase(“CAT”))
{
return new Cat();
}
else if(animalType.equalsIgnoreCase(“FOX”))
{
return new Fox();
}
return null;
}
}
|
Adım 4:
Factory(Fabrika) sınıfını kullanarak,bu fabrikaya yaratmak istediğimiz nesnenin tiplerini vermemiz yeterli olacaktır artık.(FactoryPatternDemo.java)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public class FactoryPatternDemo {
public static void main(String[] args)
{
AnimalFactory animal_factory = new AnimalFactory();
Animal animal1 = animal_factory.getAnimal(“DOG”);
Animal animal2 = animal_factory.getAnimal(“CAT”);
Animal animal3 = animal_factory.getAnimal(“FOX”);
animal1.goes();
animal2.goes();
animal3.goes();
}
}
|
Adım 5 :
Çıktı alarak doğrulayalım.
1
2
3
|
Dog goes woof!
Cat goes meow!
What does the fox say?
|
Bahsettiğimiz gibi 3 tane sınıfımız vardı ve biz FactoryPatternDemo sınıfında hiçbir şekilde bu sınıflarla(Dog.java,Cat.java,Fox.java) bir bağlantı kurmadık ve sınıfları oluşturmadık.Gerekli bilgileri Factory sınıfına gönderdik ve bu bilgilere bakarak Factory sınıfı hangi nesneyi yaratacağına kendi karar verdi.
kaynak:sedattelli.com