Proxy(Vekil) Tasarım Şablonu
Merhaba arkadaşlar,
Bugün yapısal tasarım şablonlarından olan proxy(vekil) tasarım şablonunu anlatacağım . Bu tasarım şablonunda başka bir sınıfı kontrol edebilmek için araya bir sınıf yerleştiririz ve bu sınıf bizim vekil sınıfımız olur. Şablonun ismindende anlaşılacağı gibi bir sınıfın başka bir sınıfı vekalet etmesi. Örnekleri karşımıza java.lang.reflect.Proxy sınıfı ve java.rmi paketinin tamamında kullanır. Şimdiki yapacağımız örneğimizide bankamızda bakiyemizi sorgulamaya çalışalım proxy tasarım şablonunu kullanarak.
ilk önce bankamızın servislerini temsil eden bir arayüz yazalım.
BankService.java
1 2 3 4 5 |
package com.turkishh.proxy; public interface BankService { public String balance(); } |
Bu sınıfta bakiyemizi çekebileceğimiz bir method ekliyoruz ve sonrasında bu methodu kullanabilmemiz için bir sınıf yazıyoruz.
BankServiceImpl.java
1 2 3 4 5 6 7 8 9 10 |
package com.turkishh.proxy; public class BankServiceImpl implements BankService{ @Override public String balance(){ return "90000 tl'dir"; } } |
Şimdi ise buraya dikkat BankServiceImple sınıfımıza vekil olan sınıfımızı yazıyoruz.
ServiceProxy.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package com.turkishh.proxy; public class ServiceProxy implements BankService { private boolean isLogin = false; private BankService bankService; public ServiceProxy(String user, String pass) { if ("turkishh".equals(user) && "turkishh".equals(pass)) { isLogin = true; } //Vekil edilen sınıfımızı burada oluşturuyoruz. bankService = new BankServiceImpl(); } @Override public String balance() { if (isLogin) { return bankService.balance(); } else { return "Login işlemi başarısız!"; } } } |
Görüldüğü üzere Proxy sınıfımız instance olduğunda 2 parametre ile gelmesini istiyor . Çakma login işlemi doğru ise isLogin’i true yapıyoruz ve bakiyemizi çekebileceğimiz sınıfımızın instance oluşturuyoruz. Bakalım test sınıfımızı yazalım ve yazdığımız kodun çıktısı ne oluyor bakalım.
TestProxyDesignPattern.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package com.turkishh.proxy; public class TestProxyDesignPattern { public static void main(String[] args){ BankService service = new ServiceProxy("turkishh", "turkishh"); try { System.out.println("Sonuç : " +service.balance()); } catch (Exception e) { System.out.println("Exception Message::"+e.getMessage()); } } } |
login işlemi true ve false iki ekran çıktısı aşşağıdaki gibi olacaktır.
false :
true :
Umarım yararlı olmuştur.
İyi Çalışmalar