Design Patterns

Design Patterns - Dizayn modelləri

Dizayn modelləri( bundan sonra DP) təcrübəli Obyektyönülmü Proqramlaşdırma ilə məşğul olan developerlər  tərəfindən istifadə olunan ən yaxşı tətbiqləri özündə əks etdirir. DP proqram təminatı hazırlanması zamanı developerlərin qarşılaşdığı ümumi problemlərin həlləridir. Bu həllər, olduqca uzun bir müddət boyunca developerlər tərəfindən çoxlu sınaq və səhvlərin nəticəsində əldə edilmişdir.


Gang of Four (GOF) nədir?

1994 - cü ildə 4 yazar Rich Gamma, Richard Helm, Ralph Johnson və John Vlissides, Developmentdə DP anlayışını başladan Design Patterns - Elements of Reusable Object-Oriented Software(Dizayn modelləri - Yenidən istifadə olunan Obyektyönümlü Proqramlaşdırmanın elementləri) bir kitabı yayınladı.

Bu yazarlar Gang Of Four (4-lü banda) qısaca GOF adlandırılır.

DP-nin tipləri. 

Design Patterns - Elements of Reusable Object-Oriented Software-kitabına istinad olaraq 23 DP mövcuddur. 


S.N Pattern-Təsvir
1 Creational Design Pattern
2 Structural Patterns
3 Behavioral Patterns
4 J2EE pattern


Factory Design Pattern

Factory Pattern (Fabrik Modeli) - Javada ən çox istifadə olunan dizayn modellərindən biridir. Factory Pattern bir Creational Design Patterndir ( Yaradılış Dizayn Modeli) çünki bir obyekti yaratmağın ən yaxşı yollarından birini təmin edir. 

Fabrik Modelində,  yaratma məntiqini müştəriyə(client) göstərmədən obyekt yaradır və ortaq bir interfeysdən istifadə edərək yaratdığımız obyektə baş vururuq.

İmplementasiya

"Shape" (fiqur) interfeysi qururuq hansı ki bu interfeysdən konkret class-lar implement edir. 
 Bir fabrik class olan ShapeFactory sonrakı mərhələdə yaradılacaq.

FactoryPatternDemo bir demo sinfimizdir hansı ki, Shape obyektini əldə etmək üçün ShapeFactory-dən istifadə edəcək. Ehtiyac duyduğu obyekti əldə etmək üçün məlumatları(CIRCLE / RECTANGLE / SQUARE) (Dairə,Düzbucaqlı,Kvadrat) ShapeFactory -ə göndərir. 




Mərhələ 1

İnterfeys yarat.

Shape.java



public interface Shape {
   void draw();
}


Mərhələ 2

Shape interfeysindən implement alan konkret class-ların yaradılması
Rectangle.java
public class Rectangle implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Rectangle::draw() method.");
   }
}

Square.java
public class Square implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Square::draw() method.");
   }
}


Circle.java
public class Circle implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Circle::draw() method.");
   }
}

Mərhələ 3

Fabrik class yaradılır. Fabrik class nədir? Elə bir class-dır ki, digər konkret klasslarda olan informasiyaları
xüsusi şərtlərlə və iterasiyarala emal edir.
ShapeFactory bu halda bizim üçün bir Factory (Fabrik) classdır.
ShapeFactory.java
public class ShapeFactory {
 
   //use getShape method to get object of type shape 
   public Shape getShape(String shapeType){
      if(shapeType == null){
         return null;
      }  
      if(shapeType.equalsIgnoreCase("CIRCLE")){
         return new Circle();
         
      } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
         return new Rectangle();
         
      } else if(shapeType.equalsIgnoreCase("SQUARE")){
         return new Square();
      }
      
      return null;
   }
}



Mərhələ 4

Məlumat göndərərək konkret sinifin obyektini əldə etmək üçün Fabrik klassdan istifadə edin



public
class FactoryPatternDemo { public static void main(String[] args) { ShapeFactory shapeFactory = new ShapeFactory(); //get an object of Circle and call its draw method. Shape shape1 = shapeFactory.getShape("CIRCLE"); //call draw method of Circle shape1.draw(); //get an object of Rectangle and call its draw method. Shape shape2 = shapeFactory.getShape("RECTANGLE"); //call draw method of Rectangle shape2.draw(); //get an object of Square and call its draw method. Shape shape3 = shapeFactory.getShape("SQUARE"); //call draw method of square shape3.draw(); } }


Mərhələ 5 

Output(Nəticə)

Inside Circle::draw() method.
Inside Rectangle::draw() method.
Inside Square::draw() method.

No comments:

Post a Comment