26 Nisan 2019 Cuma

Decorator Design Pattern Örneği

Decorator tasarım deseni(design pattern) , structural (yapısal) tasarım desenlerinden biridir. Elimizde bulunan class örneğine yani nesneye yeni özellikler eklemek için kullanılır. Nesnenin görevlerini kalıtım kullanmadan artırabileceğimizi gösteren bir yapıdır.


Çalışma zamanında (run time) nesneye eklenen özellikler bu sınıftan tanımlanmış olan başka nesneleri etkilemez.


Ne zaman kullanılır?
Nesneye çalışma anında yeni özellikler eklemek istiyorsak kullanılmaktadır.


Nasıl Kullanılır?
Decorator Tasarım Deseninde projede ihtiyacımız olan sınıflar gruplandırılır ve bu esnada Decorator Sınıflar ve Component Sınıflar kullanılır. Component sınıfları içerisinde Decorator sınıfı bulunur. 

Decorator Design Pattern'ini daha rahat anlayabilmek adına bir örnekle inceleyelim.


1. İlk olarak bir interface oluşturup içerisinde gövdesi olmayan metotlar yazalım.

Account.java classının kodları 

public interface Account
{
  void performTransaction(String transactionType,int accountNumber,int UserId);
  boolean checkAccountNumber();  //hesapno uygun mu kontrolü?
  boolean validateUserId(); //userid uygun mu?
}

2.Projede kullanılacak olan Bank ve Customer classlarını tanımlayalım.

public class Bank 
{
         public void performTransaction(String transactionType, int accountNo) 
         {
         //perform transaction, say transactionType is AccountBalance
         }

}


Concrete Class (Somut Class) interface implements edilerek (uygulanarak) oluşturulur.

public class BasicAccount implements Account
{  
        private Bank bank=new Bank();
        private int userId;
        private int accountNumber;


        public BasicAccount(int accountNumber, int userId)
        {
            this.accountNumber = accountNumber;
            this.userId = userId;
        }



        @Override
  public void performTransaction(String transactionType,int                                  accountNumber,int UserId
        {
             if (checkAccountNumber() && validateUserId()) 
             {
                     bank.performTransaction(transactionType, accountNumber);
             } 
             else 
             {
                    throw new Exception("Invalid user account.");
             }
}

        @Override
  public boolean checkAccountNumber() 
        {
               // using validation module validate the account.
               return true; 
}

        @Override
        public boolean validateUserId() 
        {        
              return false; // or return true if userId is valid

        }
}



Son olarak Customer Class'ını kodlayıp içerisinde main metodu olacak şekilde kurgulayalım ve bu class içerisinde BasicAccount classını barındıran classımızı yazalım.

public class Customer 
{
           private static int customerId = 007;
           private static BasicAccount bank;

           public static void main(String args[]) 
           {
                 bank = new BankProxy(123456,customerId);
                  try 
                  {
                          bank.performTransaction("AccountBalance");
                   } catch (Exception e) {
                           e.printStackTrace();
                   }
           }

}







Hiç yorum yok:

Yorum Gönder

SQL Çalışma Sorularının Çözümü

 -Ürünler tablosundaki ürünlerden Rengi siyah,silver ya da multi renkte olanları fiyat bilgisine göre büyükten küçüğe getirilip gösterilecek...