design patterns java
Bu eğitimde Java'da Tasarım Kalıplarını tartışacağız. Singleton, Factory ve Builder modellerini örnekler ve avantajlarla inceleyeceğiz:
Belirli bir sorunu çözdüğümüzde, önceden tanımlanmış bazı en iyi uygulamalarımız varsa onu daha verimli bir şekilde çözebiliriz. Bu gerçekten de bu en iyi uygulamaları takip etmemize ve daha güvenilir çözümler geliştirmemize yardımcı olacaktır.
Bunlar en iyi uygulamalar geliştirmek için kullanılabilir kanıtlanmış çözümler sorunları çözmek için ' Tasarım desenleri ”. Deneyimli OOP yazılım geliştiricileri, belirli görevleri çözmek için tasarım modellerini kullanır.
=> Java Yeni Başlayanlar Kılavuzuna Buradan Bir Göz Atın
Ne öğreneceksin:
- Java'da Tasarım Desenleri
- Java'da Singleton Pattern
- Java'da Fabrika Modeli
- Java'da Oluşturucu Modeli
- Sonuç
Java'da Tasarım Desenleri
Tasarım desenleri ilk olarak 1977'de Christopher Alexander tarafından icat edildi. Ancak daha sonra Erich Gamma, Richard Helm, John Vlissides ve Ralph Johnson adlı dört geliştirici üzerinde ' Dört Tasarım desenleri grubu, yeniden kullanılabilir nesne yönelimli yazılımın öğeleri 1995 yılında.
O zamandan beri tüm tasarım modelleri ' Dört Tasarım Modeli Grubu ”.
osi modelinin hangi katmanı çerçevelerle çalışır?
Tasarım modelleri, yaygın nesne yönelimli tasarım problemlerini çözmek için kullanıldıkları ve sadece belirli bir programlama diliyle sınırlı olmadıkları için herhangi bir programlama dilinden bağımsızdır. Yani temelde bu bir fikirdir, bir uygulama değildir.
Böylece tasarım modellerini kullanarak daha verimli, esnek, bakımı yapılabilir ve yeniden kullanılabilir programlar geliştirebiliriz.
Tasarım Desenlerinin Avantajları
Aşağıda, uygulamalarımızda tasarım modellerini kullanmanın avantajlarından bazıları listelenmiştir:
- Tasarım desenleri yeniden kullanılabilir ve birden çok proje tarafından kullanılabilir.
- Sistem mimarisini tasarım kalıplarını kullanarak tanımlayabiliriz.
- Tasarım desenleri, uygulama tasarımına şeffaflık sağlar.
- Tasarım kalıpları, endişelenmeden kullanabilmemiz için zaten iyi test edilmiş ve kanıtlanmıştır.
- Tasarım kalıpları, daha iyi sistemler oluşturmamıza ve ayrıca sistem mimarisi konusunda netlik sağlamamıza olanak tanır.
Tasarım Desenleri Ne Zaman Kullanılmalı
Peki tasarım modellerini tam olarak ne zaman kullanmalıyız?
Genellikle SDLC'nin (Yazılım Geliştirme Yaşam Döngüsü) ilk Analiz ve gereksinim aşamasında bir tasarım modeli kullanırız. SDLC'nin analiz ve gereksinim aşamasında kullanıldığında, bu aşamaya daha fazla bilgi sağlar. Java, tasarım modellerini dahili olarak destekler.
Java'daki tasarım modelleri şu şekilde kategorize edilir:
Bu öğretici söz konusu olduğunda, yalnızca yaratıcı tasarım kalıplarıyla ilgileniyoruz.
Yaratıcı tasarım kalıpları ayrıca aşağıdaki şekilde sınıflandırılır:
Bu eğitimde aşağıdaki tasarım modellerini tartışacağız:
- Singleton tasarım deseni
- Fabrika tasarım deseni
- Oluşturucu tasarım deseni
Java'da tekil tasarım modeliyle başlayalım.
Önerilen okuma = >> Flask tabanlı Uygulamalar için Tasarım Desenleri
Java'da Singleton Pattern
Tekil kalıp, Java'da bir tür yaratım kalıbıdır. Tekli desen, Java sanal makinesinde bir sınıfın yalnızca bir örneğinin mevcut olduğu bir tasarım modelidir. Bir singleton sınıfı (singleton modelini uygulamak), sınıfın örneğini almak için global bir erişim noktası sağlamalıdır.
Başka bir deyişle, bir tekil desen, bir sınıfın somutlaştırılmasını kısıtlar. Tekil desen, uygulamalar için kaydedicinin uygulanmasında kullanılır. Ayrıca iş parçacığı havuzu uygulamasında veya önbellekte kullanılır.
Java sınıfları, java.awt.Desktop ve java.lang.runtime ayrıca bir tekil desen kullanın.
Avantajlar
- Singleton sınıfının yalnızca bir örneği kullanıldığından bellekten tasarruf ediyoruz.
- Ayrıca, aynı tekil nesne tekrar tekrar kullanıldığı için yeniden kullanılabilirlik sağlar.
Şimdi tekli model uygulamasına geçelim.
Singleton Modelinin Uygulanması
Daha önce belirtildiği gibi, bir tekli tasarım deseni, sınıfı yalnızca bir örnekle sınırlar ve bu örneğe genel bir erişim noktası verilir. Bu, aynı nesneye tekrar tekrar başvuran tüm sınıflardı.
Aşağıdaki UML diyagramı Singleton modelini açıklamaktadır.
Yukarıdaki UML diyagramının gösterdiği gibi, bir singleton sınıfının tanımlanmış tek bir örneği vardır ve ona getInstance () yöntemiyle erişiriz. Dolayısıyla, nesnelerin oluşturulmasından sorumlu bir tekil fabrika, aynı nesneyi (sınıfta bulunan) tekrar tekrar döndürmek için getInstance yöntemini kullanır.
Peki Singleton Modelini bir Programda nasıl uygularız?
Bir singleton sınıfı yaratıyoruz ve sınıfın somutlaştırılmaması için kurucusunu 'özel' yapıyoruz. Daha sonra sınıfın içinde bu singleton sınıfının özel bir örneğini oluşturuyoruz. Ardından, dış dünyaya tek bir nesne döndüren özel bir genel yöntemimiz getInstance () var.
Bu tekil sınıfın yukarıda açıklandığı gibi bu uygulaması aşağıdaki Java programında gösterilmektedir.
class SingletonObject { //create an object of SingletonObject private static SingletonObject instance = new SingletonObject(); //private constructor so that we cannot instantiate the class private SingletonObject(){} //returns the only available object public static SingletonObject getInstance(){ return instance; } public void printMessage(){ System.out.println('Hello from Singleton object!!!'); } } public class Main { public static void main(String() args) { //illegal statement because constructor is private //Compile Time Error: The constructor SingletonObject() is not visible //SingletonObject object = new SingletonObject(); //call getInstance to retrieve the object available from the class SingletonObject object = SingletonObject.getInstance(); //show the message object.printMessage(); } }
Çıktı:
Şimdi ana yöntemi kontrol edersek, yeni bir operatör kullanarak singleton sınıfının bir nesnesini oluşturmaya çalışırsak, derleyicinin bir derleme hatası vereceğini unutmayın (ana yöntemdeki açıklamalı koda bakın). GetInstance () yöntemini kullanarak singleton sınıfının nesnesini elde ederiz ve ardından yöntemlere erişmek için her zamanki gibi kullanabiliriz.
Java'da Fabrika Modeli
Fabrika kalıbı, Java'da 'Fabrika Yöntemi kalıbı' veya 'Sanal Oluşturucu' olarak da adlandırılır. Bu modelde, yöntem bildirimleriyle bir arayüz veya soyut bir sınıf oluştururuz ve ardından bu arayüzü uygulayan veya sınıfı miras alan somut sınıflar veya alt sınıflar, sınıfın örneklerini oluşturmaktan sorumludur.
Avantajlar
- Fabrika kalıbı bir tür yaratım kalıbıdır ve Java'da en yaygın kullanılan kalıptır.
- Bir fabrika modeli kullanarak, gerçek yaratma mantığının dış dünyaya maruz kalmamasını sağlıyoruz.
Dolayısıyla, bir fabrika modelini uygulayan bir sınıfın faiz oranını hesaplamak için bir yöntemi varsa, o zaman somut sınıflar bu sınıfı uygulayacak ve aynı zamanda faiz oranını hesaplamak için yöntemi uygulayacaktır.
Sonra, bu somut sınıf örneklerine erişecek bir fabrika sınıfı olan başka bir sınıf olacak, böylece faiz oranını hesaplama mantığının nasıl uygulandığının farkında olmayacağız. Sadece metodu çağırıp çıktıyı alıyoruz.
Peki, Fabrika Yöntemi modelini tam olarak ne zaman kullanabiliriz?
Üst sınıflar, alt sınıflarına örnek oluşturma yetkisi vermeye karar verdiklerinde, bir fabrika modeline gidebiliriz (Bu yukarıda açıklanmıştır). Sınıf hangi alt sınıfların oluşturulacağını bilmediğinde de fabrika yöntemini kullanabiliriz.
Şimdi fabrika yöntemi modelinin uygulanmasına bakalım.
Fabrika Modelinin Uygulanması
Örnek olarak, genel bir şekil arayüzü uygulayalım. Bu arayüzden daire, dikdörtgen vb. Gibi çeşitli somut sınıflar türetebiliriz. Daha sonra somut sınıf nesnelerine erişecek bir shapeFactory sınıfımız olacak. Bu model için UML aşağıda gösterilmiştir.
Daha önce açıklandığı gibi bu, fabrika modeli için UML diyagramıdır. Şimdi fabrika modelini gösteren bir Java programı uygulayacağız.
//Geometric_shape interface interface Geometric_shape { void draw_shape(); } //Geometric shape classes implementing Geometric_shape interface class Rectangle implements Geometric_shape { @Override public void draw_shape() { System.out.println('Rectangle class::draw_shape() method.'); } } class Square implements Geometric_shape { @Override public void draw_shape() { System.out.println('Square class::draw_shape() method.'); } } class Circle implements Geometric_shape { @Override public void draw_shape() { System.out.println('Circle class::draw_shape() method.'); } } //Factory class for Geometric_shape class ShapeFactory { //shapeObject method gets particular shapeType (circle, Square or Rectangle) public Geometric_shape shapeObject(String shapeType){ if(shapeType == null){ return null; } //retrieve Circle object if(shapeType.equalsIgnoreCase('Circle')){ return new Circle(); //retrieve Rectangle object } else if(shapeType.equalsIgnoreCase('Rectangle')){ return new Rectangle(); ////retrieve Square object } else if(shapeType.equalsIgnoreCase('Square')){ return new Square(); } return null; } } public class Main { public static void main(String() args) { //Create a ShapeFactory object to get different geometric shapes ShapeFactory shapeFactory = new ShapeFactory(); //circle Geometric_shape shape_Circle = shapeFactory.shapeObject('CIRCLE'); //draw method of Circle shape_Circle.draw_shape(); //Rectangle Geometric_shape shape_Rectangle = shapeFactory.shapeObject('RECTANGLE'); //draw method of Rectangle shape_Rectangle.draw_shape(); //Square Geometric_shape shape_Square = shapeFactory.shapeObject('SQUARE'); //draw method of square shape_Square.draw_shape(); } }
Çıktı:
Java'da Oluşturucu Modeli
Builder modelinde, küçük ve basit nesneler kullanarak karmaşık bir nesne oluşturmak için adım adım bir yaklaşım kullanıyoruz.
Dolayısıyla, tek bir adımda yaratılamayacak bir nesneyle karşılaştığımızda, bir kurucu kalıbı seçiyoruz.
Avantajlar
- Oluşturucu modelini kullanarak, bir nesnenin yapısını ve temsilini ayırabiliriz.
- Ayrıca nesnenin iç temsilini de değiştirebiliriz.
- Oluşturucu modelini kullanarak bütün bir dağıtım sistemi gibi karmaşık tasarımlar oluşturabiliriz.
Builder modelinin pratik bir örneği, sipariş edilen gıda maddelerinin toplanması, ardından ambalajlanması, faturalandırılması, siparişin oluşturulması ve daha sonra gönderilmesi gibi karmaşık adımları içeren yemek sipariş sistemidir.
Bu eğitimde, Builder modelini kullanarak bir tablet sipariş sistemi örneği uygulayacağız.
Builder Modelinin Uygulanması
Oluşturucu modeli için genel UML diyagramı aşağıda verilmiştir.
Yukarıdaki diyagram, Oluşturucu model UML diyagramını gösterir. Yukarıdaki diyagramda gösterildiği gibi, Oluşturucu modelinde dört bileşenimiz var.
- Ürün: Bu, inşa edilecek karmaşık nesneyi temsil eder.
- Builder Abstract sınıfı: Karmaşık bir nesne oluşturmak için gereken tüm işlevlerin prototiplerini içeren soyut bir sınıf.
- ConcreteBuilder Sınıfı: Bu, Builder sınıfından miras alan ve belirli bir karmaşık nesne oluşturan somut bir sınıftır. İhtiyaç duyduğumuz kadar ConcreteBuilder sınıfımız olabilir.
- Yönetmen sınıfı: Bu sınıf, nihai ürünü oluşturan algoritmaları kontrol eder.
Aşağıdaki programlama örneği, bir tablet sipariş oluşturma sistemi kullanan Builder modelinin gösterimini gösterir.
import java.util.ArrayList; import java.util.List; //Packing interface for tablets interface Packing { public String pack(); public int price(); } //Tablet class - abstract abstract class Tablet implements Packing{ public abstract String pack(); } //company - extends Tablet abstract class Company extends Tablet{ public abstract int price(); } //Lenovo tablet class Lenovo extends Company{ @Override public int price(){ return 541; } @Override public String pack(){ return 'Lenovo Yoga'; } } //Micromax tablet class MicroMax extends Company { @Override public int price(){ return 338; } @Override public String pack(){ return 'MicroMax'; } } //Tablet type class TabType { private List items=new ArrayList(); //add items public void addItem(Packing packs) { items.add(packs); } //retrieve cost public void getCost(){ for (Packing packs : items) { packs.price(); } } //show all items public void showItems(){ for (Packing packing : items){ System.out.print('Tablet name : '+packing.pack()); System.out.println(', Price(in U.S.Dollars) : '+packing.price()); } } } //builder class for tablets order class TabBuilder { public TabType buildLenovoTab(){ TabType lenovo =new TabType(); lenovo.addItem(new Lenovo()); return lenovo; } public TabType buildMicroMaxTab(){ TabType mmx=new TabType(); mmx.addItem(new MicroMax()); return mmx; } } public class Main{ public static void main(String args()){ //build the tablets order and display the order TabBuilder tabBuilder=new TabBuilder(); TabType tabtype1=tabBuilder.buildLenovoTab(); tabtype1.showItems(); TabType tabtype2=tabBuilder.buildMicroMaxTab(); tabtype2.showItems(); } }
Çıktı:
Yukarıdaki örnekte, Lenovo ve Micromax gibi iki tablet markası için eksiksiz bir tablet sipariş sistemi oluşturduk. Bunlar, soyut sınıf şirketinden miras kalan betonBuilder sınıflarıdır. Ardından, her iki tablet sınıfı için de siparişleri oluşturan bir TabBuilder sınıfımız var.
Sıkça Sorulan Sorular
S # 1) Java'da Tasarım Kalıpları nelerdir? Java'daki tasarım örüntüleri türleri nelerdir?
qa testi lideri mülakat soruları ve cevapları
Cevap: Tasarım kalıpları, iyi test edilmiş çözümler geliştirmek için kullanılabilecek en iyi uygulamalardır.
Java'nın üç tür tasarım modeli vardır:
- Yaratıcı tasarım modeli: Fabrika kalıbı, Soyut Fabrika kalıbı, Singleton kalıbı, Oluşturucu kalıbı ve prototip kalıbı, yaratımsal tasarım kalıplarının örnekleridir. Bunlar esas olarak nesnelerin yaratılmasıyla ilgilidir.
- Yapısal tasarım deseni: Çoğunlukla bir sınıf yapısı oluşturmak için kullanılırlar. Bağdaştırıcı, Köprü ve bileşik desen popüler yapısal tasarım modelleridir.
- Davranışsal tasarım modeli: Bunlar, uygulamayı kolayca genişletme esnekliği ile birlikte nesneler arasında daha iyi etkileşim sağlar. Gözlemci kalıpları, strateji kalıbı vb. Davranış kalıplarının bazı örnekleridir.
S # 2) Tasarım Kalıpları neden kullanılıyor?
Cevap: Tasarım kalıpları bize karmaşık sorunları çözmek için kullanabileceğimiz kanıtlanmış ve test edilmiş bir çözüm modeli sağlar. Tasarım modelleri, gevşek kaplinli uyumlu modüller oluşturmamızı sağlar. Tasarım kalıpları ayrıca tasarımcılar arasındaki etkileşimi daha verimli ve etkili hale getirir.
S # 3) Kalıp örnekleri nelerdir?
Cevap: Doğal desen örnekleri, doğada bulunan görünür düzenliliklerdir. Simetriler, ağaçlar, dalgalar, köpükler, çizgiler, çatlaklar vb. Gibi doğal desenler, bazı doğal desen örnekleridir.
S # 4) MVC bir Tasarım Modeli mi?
Cevap: Evet, veri modeli, sunum veya görünüm katmanı ve denetleyiciden oluşan bir uygulama oluşturabileceğimiz bir tür tasarım kalıbıdır. Daha çok mimari desen olarak sınıflandırabiliriz.
Sonuç
Bu, Java'daki tasarım kalıpları hakkındaki tartışmamızı tamamlıyor. Java, üç tür tasarım modelini desteklese de. Yaratımsal, Yapısal ve Davranışsal kalıplar, daha çok yaratımsal tasarım modeliyle ilgileniyoruz.
Bu eğiticinin kapsamına göre, üç yaratıcı tasarım modeli örneğini, yani tekli desen, fabrika deseni ve oluşturucu deseni tartıştık.
Tekli desen, en basit tasarım modelidir ve fabrika yönteminin yaygın olarak kullanılan ortak bir tasarım modeli olduğu varsayılmaktadır. Oluşturucu modeli, karmaşık nesneler oluşturmak için kullanılır ve çoğunlukla karmaşık uygulamaların geliştirilmesinde kullanılır.
=> Mükemmel Java Eğitim Kılavuzuna Buradan Bakabilirsiniz.
Önerilen Kaynaklar
- String Buffer ve String Builder Eğitimi ile Java String
- Java Dağıtımı: Java JAR Dosyasının Oluşturulması ve Yürütülmesi
- Java Temelleri: Java Sözdizimi, Java Sınıfı ve Temel Java Kavramları
- Java Sanal Makinesi: JVM, Java Uygulamasını Çalıştırmada Nasıl Yardımcı Olur?
- Yeni Başlayanlar İçin JAVA Eğitimi: 100+ Uygulamalı Java Video Eğitimi
- Java Tamsayı ve Örneklerle Java BigInteger Sınıfı
- Java Bileşenleri: Java Platformu, JDK, JRE ve Java Sanal Makinesi
- Önemli Java Anahtar Kelime Listesi - Java'da Ayrılmış Kelimeler