Tasarım Kalıplarına Giriş
Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 64 / 87.
Tasarım kalıpları, geliştiricilerin yazılım oluştururken tekrar tekrar karşılaştığı yaygın sorunlara yönelik kanıtlanmış çözümlerdir. Her seferinde tekerleği yeniden icat etmek yerine, yinelenen tasarım zorluklarını çözmek için zaman içinde kendini kanıtlamış bu şablonları uygulayabilirsin.
Tasarım kalıplarını şablonlar olarak düşünün. Kopyalayıp yapıştırmanız için hazır kod vermezler; ancak belirli bir problem türünü çözmek için sınıflarınızı ve nesnelerinizi nasıl yapılandıracağınızı açıklarlar. Öğreneceğiniz kalıplar, daha önce ustalaştığınız OOP kavramlarından yararlanır: kalıtım, arayüzler, çok biçimlilik ve bileşim.
Tasarım kalıpları üç ana kategoriye ayrılır:
| Kategori | Amaç | Örnekler |
|---|---|---|
| Creational | Nesnelerin nasıl oluşturulduğu | Singleton, Factory, Builder |
| Structural | Nesnelerin nasıl birleştirildiği | Adapter, Decorator, Composite |
| Behavioral | Nesnelerin nasıl iletişim kurduğu | Observer, Strategy, Command |
Tasarım kalıplarını neden öğrenmelisiniz? Diğer geliştiricilerle ortak bir söz dağarcığı sağlarlar: “Burada bir Factory kullanın” demek, karmaşık bir fikri anında iletir. Ayrıca “bir uygulamaya değil, bir arayüze göre programlayın” gibi ilkeleri uygulayarak daha esnek ve bakımı kolay kod yazmanıza yardımcı olurlar.
Gelecek derslerde, Singleton ve Factory gibi oluşturucu kalıplarla başlayarak, ardından Observer ve Strategy gibi davranışsal kalıplara geçip çeşitli temel kalıpları uygulayacaksın.
Görev
KolayÜç tasarım deseni kategorisini anladığınızı gösteren basit bir desen sınıflandırıcısı oluşturalım! Desenleri kategorilere ayıran ve amaçlarını açıklayan bir sistem oluşturacak, kodunuzu birden fazla dosyada düzenleyeceksiniz.
Üç dosya oluşturacaksınız:
Pattern.java: Tüm tasarım desenleri için sözleşmeyi tanımlayanPatternadlı bir arayüz oluşturun. Arayüzünüz iki metot bildirmelidir: desenin kategorisini (Creational, Structural veya Behavioral) döndürenString getCategory()ve o kategorideki desenlerin ne yaptığını açıklayan bir açıklama döndürenString getPurpose().PatternInfo.java:Patternarayüzünüzü uygulayan ve tasarım deseni kategorilerinden birini temsil eden üç sınıf oluşturun:CreationalPatternkategori için"Creational", amaç için"How objects are created"döndürmelidir.StructuralPatternkategori için"Structural", amaç için"How objects are composed"döndürmelidir.BehavioralPatternkategori için"Behavioral", amaç için"How objects communicate"döndürmelidir.Main.java: Desen sınıflandırıcınızı bir araya getirin! Şunlardan biri olacak bir desen adı (String) biçiminde tek bir girdi alacaksınız:"Singleton","Factory","Adapter","Decorator","Observer"veya"Strategy".Girdiye göre uygun desen nesnesini oluşturun:
"Singleton"ve"Factory", Creational desenlerdir"Adapter"ve"Decorator", Structural desenlerdir"Observer"ve"Strategy", Behavioral desenlerdir
Desen nesnenizi
Pattern(arayüz) türündeki bir değişkende saklayarak arayüze yönelik programlama ilkesini gösterin. Ardından aşağıdaki üç satırı yazdırın:Pattern: [input pattern name]Category: [category from getCategory()]Purpose: [purpose from getPurpose()]
Tek bir girdi alacaksınız: bir tasarım deseninin adı (String).
Bu görev, dersteki temel kavrayışı pekiştirir: tasarım desenleri, çözdükleri probleme göre kategoriler halinde düzenlenir. Bir arayüz kullanarak, tasarım desenlerini bu kadar güçlü kılan temel bir kavram olan "uygulamaya değil, arayüze yönelik programlama" ilkesini de uygulamış olursunuz!
Kendin dene
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String patternName = scanner.nextLine();
// TODO: Pattern türünde bir değişken bildir (arayüz)
Pattern pattern = null;
// TODO: patternName'e göre uygun pattern nesnesini oluştur:
// - "Singleton" ve "Factory" Yaratımsal desenlerdir
// - "Adapter" ve "Decorator" Yapısal desenlerdir
// - "Observer" ve "Strategy" Davranışsal desenlerdir
// TODO: Çıktıyı aşağıdaki formatta yazdır:
// Pattern: [giriş pattern adı]
// Category: [getCategory()'den kategori]
// Purpose: [getPurpose()'den amaç]
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarAlanlar (Öznitelikler)Yapıcı MetotYapıcı Metot Aşırı YüklemeÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (extends)super Anahtar KelimesiMetot Geçersiz Kılma (@Override)Yapıcı Metot ZincirlemeObject SınıfıTekli ve Çok Seviyeli KalıtımNeden Çoklu Sınıf Kalıtımı Yok?Özet - Çalışan Hiyerarşisi7Özel Metotlar ve Object Sınıfı
toString() Metoduequals() ve hashCode()clone() MetoducompareTo() ve ComparableComparator ArayüzüÖzet - Özel Sıralama2Erişim Belirleyiciler ve Kapsülleme
Erişim Seviyelerine Genel BakışGetter ve Setter MetotlarıBilgi Gizlemefinal Anahtar KelimesiÖzet - Banka Hesabı Yöneticisi5Polimorfizm
Metot Aşırı Yükleme TemelleriMetot Geçersiz Kılma (Çalışma Zamanı)Upcasting ve Downcastinginstanceof OperatörüSoyut Sınıflar ve MetotlarÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon vs KalıtımAgregasyon vs KompozisyonDahili, Yuvalanmış ve Anonim SınıflarEnum'lar ve Enum MetotlarıRecords (Java 16+)Sealed Classes (Java 17+)11Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıBuilder KalıbıObserver KalıbıStrategy Kalıbı14Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi3Sınıf Özellikleri ve Statik Üyeler
Instance ve Statik DeğişkenlerStatik MetotlarStatik BloklarSabitler (static final)Özet - Sayaç ve Utility6Arayüzler ve Soyut Sınıflar
Arayüzlere GirişArayüzleri UygulamaÇoklu Arayüz UygulamaArayüzlerde Default ve StaticSoyut Sınıflar ve ArayüzlerFonksiyonel ArayüzlerÖzet - Ödeme Sistemi9Generics
Generics'e GirişGeneric SınıflarGeneric MetotlarSınırlandırılmış Tip ParametreleriWildcard'lar (?, extends, super)Özet - Generic Container12Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıYineleyici KalıbıKendi başına pratik yap: Online Java derleyicisi