10 Ağustos 2007 Cuma

Core Design Patterns: Abstract Factory Pattern

Abstract Factory Pattern: Bu paternin yaptığı iş bir çok değişik factory objesini encapsule etmekdir. Creation ile ilgili bir patterndir. Kullanımı şöyledir. Client uygulama abstract factory classından somut bir obje yaratır. Ve bu objenin genel methodlarını kullanır. Client uygulama alt seviyede yaratılan objenin hangi obje olduğunu bilmez. Bu pattern bir obje kümesinin implementasyon ayrıntıları ile genel kullanımını birbirinden ayırır.

Örnek Kod:

Button.java

package factory;
abstract class Button
{
public abstract void paint();
}

OSXButton.java
package factory;
class OSXButton extends Button
{
public void paint()
{
System.out.println("I'm an OSXButton: ");
}
}

WinButton.java
package factory;
class WinButton extends Button
{
public void paint()
{
System.out.println("I'm a WinButton: ");
}
}

GUIFactory.java
package factory;
abstract class GUIFactory
{
public static GUIFactory getFactory()
{
//int sys = readFromConfigFile("OS_TYPE");
int sys=1;
if (sys == 0)
{
return new WinFactory();
}
else
{
return new OSXFactory();
}
}

public abstract Button createButton();
}

OSXFactory.java
package factory;
class OSXFactory extends GUIFactory
{
public Button createButton()
{
return new OSXButton();
}
}

WinFactory.java
package factory;
class WinFactory extends GUIFactory
{
public Button createButton()
{
return new WinButton();
}
}

Application.java
package factory;
public class Application
{
public static void main(String[] args)
{
//GUIFactory içindeki int sys=1 satırı int sys=0 yapılırsa winButton üretilir.
GUIFactory factory = GUIFactory.getFactory();
Button button = factory.createButton();
button.paint();
}
// Output is either:
// "I'm a WinButton:"
// or:
// "I'm an OSXButton:"
}

UML Of Abstract Factory Pattern

Hiç yorum yok: