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();
}
}
}
26 Nisan 2019 Cuma
Kaydol:
Kayıtlar (Atom)
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...
-
Merhaba arkadaşlar, bu makalemde Java_Home ortam değişkenini neden tanıtmalıyız bundan bahsedeceğim. Öncelikle Java Projelerinin çalışa...
-
Merhabalar arkadaşlar, bu makalemizde Java programlama dili kullanarak eclipse geliştirme ortamında oluşturduğumuz projeyi başka bir bilgisa...
-
Algoritma, bilindiği üzere problem çözümünde kullanılan sıralı basamaklardır. Aşağıda bazı algoritma örnekleri yer almaktadır. Yı...