Jun 06
Aslında Java ile biraz uğraştıysanız Adapter Pattern size tanıdık gelecektir. WindowAdapter, ComponentAdapter, MouseAdapter vb sınıflar Adapter Pattern özelliğini kullanırlar. Adapter Pattern’ın en önemli özelliği uygulanabilirliği ve tekrar kullanabilirliği(reusability) sağlamasıdır.
Aşağıdaki kod Adapter Pattern’a bir örnektir.
interface Clean {
public void makeClean();
}
class Office implements Clean{
public void makeClean() {
System.out.println("Ofis temizlendi");
}
}
class Workshop implements Clean{
public void makeClean() {
System.out.println("İşyeri temizlendi");
}
}
Bizim Clean işlemi yapan bir arayüzümüz var. Bu işlemi Office ve Workshop sınıflarında kullanıyorum. Fakat daha sonra başka bir sınıfta Clean işleminden sonra Dry işlemi de yapmak istiyorum. Bunun için Clean arayüzünü içeren başka bir arayüz oluşturuyorum.
interface Extra extends Clean{
public void makeDry();
}
class School implements Extra{
public void makeClean() {
System.out.println("Okul temizlendi");
}
public void makeDry() {
System.out.println("Okul kurulandı");
}
}
Bu yeni arayüzü School sınıfında implement ederek gerekli işlemleri yapıyorum.
Şimdi sıra kodumuzu test etmeye geldi.
class Test {
public static void Jobs(Extra job) {
if (job instanceof Clean)
((Clean)job).makeClean();
if (job instanceof Extra)
((Extra)job).makeDry();
}
public static void main(String[] args) {
Extra e = new School();
Jobs(e);
Clean c1 = new Office();
Clean c2 = new Workshop();
c1.makeClean();
c2.makeClean();
e.makeClean();
}
}
Bu kodun ekran çıktısı

yazan ekocaman
May 19
Programlamada sınıfın kendisi yerine onun referansını kullanmak Ripple Effect‘i azaltır. Yani siz sınıfınızı değiştirdiğiniz zaman bu kodu kullandığınız yeri değiştirmenize gerek kalmıyor. Size bu sınıfın yaptığı işlemin belli kısımlarını kullanıcıya sunmaya olanak tanıyor. Örnek vermek gerekirse siz bir interface yazdınız ve bu interface getConnection methodunu içeriyor. Siz bu interface’i implement eden çeşitli sınıflar yazarak farklı databaselere aynı interface üzerinden bağlanabilirsiniz.
Aşağıdaki kodda ise iki farklı GUI elemanımız olduğunu düşünelim. Win ve OSX olsun bunlar. Ben bunlara tek sınıf üzerinden erişmek istediğimde aşağıdaki kodu yazabiliriz.
/*
* GUIFactory example
*/
abstract class GUIFactory {
public static GUIFactory getFactory() {
// Bir dosyadan hangi factory olacağını
// okuduğumuzu farzedelim
int sys = readFromConfigFile("OS_TYPE");
if (sys == 0) {
return new WinFactory();
} else {
return new OSXFactory();
}
}
public abstract Button createButton();
}
class WinFactory extends GUIFactory {
public Button createButton() {
return new WinButton();
}
}
class OSXFactory extends GUIFactory {
public Button createButton() {
return new OSXButton();
}
}
abstract class Button {
public abstract void paint();
}
class WinButton extends Button {
public void paint() {
System.out.println("I'm a WinButton: ");
}
}
class OSXButton extends Button {
public void paint() {
System.out.println("I'm a OSXButton: ");
}
}
public class Application {
public static void main(String[] args) {
// Görüldüğü üzere sınıfı kullanan kişi
// WinFactory ve OSXFactory sınıfları hakkında
// bilgi bilmesine gerek yok
GUIFactory factory = GUIFactory.getFactory();
Button button = factory.createButton();
button.paint();
}
}
yazan ekocaman
Mar 14
Singleton Pattern kullanarak aynı objeden sadece bir tane oluşturmayı amaçlarız. Örnek vermek gerekirse java kodlarken newInstance() methodunu kullanmışsınızdır. Bu method Singleton Pattern kullanmaktadır. Eğer obje oluşturulmuş ve null değilse tekrar aynı objeyi döner aksi taktirde yeni bir obje yaratır ve o objeyi döner.
static String singleton = null;
String newInstance() {
if(singleton == null) {
singleton = new String("Singleton Value");
}
return singleton;
}
Yukarıdaki örnekte görüldüğü gibi newInstance methodu ilk kez çağırıldığında singleton objesi oluşturuluyor ama ikinci kez çağırıldığında var olan obje kullanılıyor.
yazan ekocaman
Mar 14
Yazılım Mühendisliğinde Design Pattern tekrarlanan aynı tür problemlere karşı bir çözümdür. Design Pattern size sadece bir template sunar ve siz kodunuzu bu template’e göre geliştirirsiniz. Bu yüzdendir ki Design Patternlar asla dil bağımlı değillerdir.
Design Patternlar yazılım geliştirme sürecini hızlandırmakla kalmaz aynı zamanda yazılımın kalitesini de arttırır. Çünkü Design Patternlar belli bir gelişim aşamasından sonra ortaya çıkmışlardır ve kendilerini kanıtlamış algoritmalardır.
yazan ekocaman
Mar 14
javaci.net’e yeni bir kategori daha açtım. “Design Pattern” kategorisi.
Bu kategori içerisinde gerçekten bilinmesi gereken Java Design Patternları hakkında açıklamalar ve örnek kodlar yayınlayacağım.
Şu an ingilizce kaynak olarak bu dosyayı indirebilirsiniz.
Ya da http://www.javacamp.org/designPattern/ adresinde çok sade ve anlaşılır bilgilere ulaşabilirsiniz.
yazan ekocaman
Son Yorumlar