Merhabalar Java dostları,
Yeni tasarım şablonumuz facade design pattern, kelime anlamı gibi bir cephe, bir duvar gibi çalışıyor mantık olarak. Yazılım componentini kullanan istemci için bir arayüz gibi çalışır. Katmanlar arası bağımlılıkları azaltmak için kullanabilir. Örnek verecek olursam, üçüncü parti kütüphaneleri kullanan bir paket, soyutlamayı sağlamak için son kullanıcıya bir arayüz sunar ve biz sadece bu arayüz ile muhattap oluruz. Şimdi sizlere günlük bir hayattan örnek vermek istiyorum. Manuel ve otomatik vites çeşitlerimiz olsun. Biz sürücü olarak sadece interface ile muhattap oluruz. Kapalı kısmın içerisinde ne yapıldığı ile ilgilenmeyiz. Her üretici kendi teknolojisine göre farklı bir yapı çalıştırır.
İşte kodumuz.
package designpattern.facade;public interface IGear { public static final int GEAR_MAN = 1; public static final int GEAR_AUTO = 2; public int gearUp(); public int gearDown(); } |
package designpattern.facade;public class ManGear implements IGear { private final int MAX_GEAR = 6; private int gear = 0; @Override public int gearUp() { if (gear == MAX_GEAR) { System.out.println(“Max gear”); } else { gear++; // Other man gear steps. } return gear; } @Override public int gearDown() { if (gear == 0) { System.out.println(“Min gear”); } else { gear–; // Other man gear steps. } return gear; } } |
package designpattern.facade;public class AutoGear implements IGear { private final int MAX_GEAR = 4; private int gear = 0; @Override public int gearUp() { if (gear == MAX_GEAR) { System.out.println(“Max gear”); } else { gear++; // Other auto gear steps. } return gear; } @Override public int gearDown() { if (gear == 0) { System.out.println(“Min gear”); } else { gear–; // Other auto gear steps. } return gear; } } |
package designpattern.facade;public class GearFactory { private static GearFactory instance = new GearFactory(); private GearFactory() { } public static GearFactory instance() { return instance; } public IGear buildGear(int gearType) { switch (gearType) { case IGear.GEAR_MAN: return new ManGear(); case IGear.GEAR_AUTO: return new AutoGear(); default: return null; } } } |
package designpattern.facade;public class FacadeMain { public static void main(String[] args) { IGear manGear = GearFactory.instance().buildGear(IGear.GEAR_MAN); IGear autoGear = GearFactory.instance().buildGear(IGear.GEAR_AUTO); for (int i = 0; i < 10; i++) { System.out.println(manGear.gearUp()); System.out.println(autoGear.gearUp()); } for (int i = 0; i < 10; i++) { System.out.println(manGear.gearDown()); System.out.println(autoGear.gearDown()); } } } |
Aslında bu şablon factory, abstract factory şablonları ile benzerlik göstermektedir.
Bol Java’ lı günler dileğiyle…
Yazan: Faruk BOZAN