Yepyeni bir tasarım şablonumuz daha var artık: "Bridge Design Pattern"
Her design pattern öğesinde olduğu gibi bridge design pattern için de temel amaç soyutlama yöntemi ile mimariler arasında esnek bağ sağlamaktır. En temel prensibimiz, yazılımın geliştirmeye ve genişletmeye açık; ama değişikliğe kapalı olmasıdır. Bridge design pattern’ in kilit noktası soyutlama sınıfları ile gerçekleyen sınıfların ayrı hiyerarşik yapıda olmasıdır. Her iki hiyerarşik yapıda bir üst sınıf vardır ve bu üst sınıflar birbirinden haberdardır. Dolayısıyla detaylar saklanmış olunur. İsterseniz hemen bridge design pattern ile ilgili örneğimize geçelim.
package designpattern.bridge; public interface IEngine { public String startEngine(); } |
package designpattern.bridge; public class ClassicEngine implements IEngine { @Override public String startEngine() { return “Classic engine”; } } |
package designpattern.bridge; public class SportEngine implements IEngine { @Override public String startEngine() { return “Sport engine”; } } |
package designpattern.bridge; public abstract class Car { private IEngine engine = null; private String carName = “”; public Car(String carName, IEngine engine) { setCarName(carName); setEngine(engine); } public IEngine getEngine() { return engine; } public void setEngine(IEngine engine) { this.engine = engine; } public String getCarName() { return carName; } public void setCarName(String carName) { this.carName = carName; } public abstract void drive(); } |
package designpattern.bridge; public class BMW extends Car { public BMW(String carName, IEngine engine) { super(carName, engine); } @Override public void drive() { System.out.println(getCarName().concat(” with: “).concat(getEngine().startEngine())); } } |
package designpattern.bridge; public class Audi extends Car { public Audi(String carName, IEngine engine) { super(carName, engine); } @Override public void drive() { System.out.println(getCarName().concat(” with: “).concat(getEngine().startEngine())); } } |
package designpattern.bridge; public class BridgeMain { public static void main(String[] args) { Car bmw = new BMW(“BMW”, new ClassicEngine()); Car auid = new BMW(“Auid”, new SportEngine()); bmw.drive(); auid.drive(); } } |
Bu örneğimizde önce IEngine arayüzü ile birinci hiyerarşimizi oluşturuyoruz. Daha sonra ikinci hiyerarşiyi Car abstract sınıfı ile oluşturduk ve kendi içerisinde IEngine arayüzünü obje olarak kullanmaktadır. Son olarak main sınıfında ise bu değerleri dinamik olarak verdik. Özetleyecek ve tekrarlayacak olursak bridge design pattern ile iki hiyerarşi oluşturduk ve birbirilerini kullanmalarını sağladık.
Bol Java’ lı günler dileğiyle…
Yazan: Faruk BOZAN