Corak pencari perkhidmatan
Service Locator Pattern digunakan apabila kita ingin menggunakan pertanyaan JNDI untuk mencari pelbagai perkhidmatan. Memandangkan mencari JNDI untuk perkhidmatan adalah mahal, corak pencari perkhidmatan mengambil kesempatan daripada teknologi caching. Kali pertama perkhidmatan diminta, pencari perkhidmatan mencari perkhidmatan dalam JNDI dan menyimpan cache objek perkhidmatan. Apabila perkhidmatan yang sama diminta sekali lagi, pencari perkhidmatan melihat dalam cachenya, yang boleh meningkatkan prestasi aplikasi ke tahap yang besar. Berikut ialah entiti bagi corak reka bentuk ini.
Perkhidmatan - Perkhidmatan yang sebenarnya mengendalikan permintaan. Rujukan kepada perkhidmatan ini boleh didapati di pelayan JNDI.
Konteks / Konteks Permulaan - Konteks JNDI dengan rujukan kepada perkhidmatan yang akan ditemui.
Service Locator - Service locator ialah satu titik hubungan untuk mendapatkan perkhidmatan melalui carian JNDI dan perkhidmatan caching.
Cache - Cache menyimpan rujukan kepada perkhidmatan supaya ia boleh digunakan semula.
Pelanggan - Pelanggan ialah objek yang memanggil perkhidmatan melalui ServiceLocator.
Melaksanakan
kami akan mencipta ServiceLocator, InitialContext, Cache, S sebagai pelbagai objek yang mewakili entiti. Perkhidmatan1 dan Perkhidmatan2 mewakili perkhidmatan entiti.
ServiceLocatorPatternDemo, kelas demo kami di sini sebagai pelanggan dan akan menggunakan ServiceLocator untuk menunjukkan corak reka bentuk pencari perkhidmatan.
Langkah 1
Buat Perkhidmatan antara muka perkhidmatan.
Service.java
public interface Service { public String getName(); public void execute(); }
Langkah 2
Buat perkhidmatan entiti.
Service1.java
public class Service1 implements Service { public void execute(){ System.out.println("Executing Service1"); } @Override public String getName() { return "Service1"; } }
Service2.java
public class Service2 implements Service { public void execute(){ System.out.println("Executing Service2"); } @Override public String getName() { return "Service2"; } }
Langkah 3
Buat untuk pertanyaan JNDI Konteks Permulaan.
InitialContext.java
public class InitialContext { public Object lookup(String jndiName){ if(jndiName.equalsIgnoreCase("SERVICE1")){ System.out.println("Looking up and creating a new Service1 object"); return new Service1(); }else if (jndiName.equalsIgnoreCase("SERVICE2")){ System.out.println("Looking up and creating a new Service2 object"); return new Service2(); } return null; } }
Langkah 4
Buat Cache.
Cache.java
import java.util.ArrayList; import java.util.List; public class Cache { private List<Service> services; public Cache(){ services = new ArrayList<Service>(); } public Service getService(String serviceName){ for (Service service : services) { if(service.getName().equalsIgnoreCase(serviceName)){ System.out.println("Returning cached "+serviceName+" object"); return service; } } return null; } public void addService(Service newService){ boolean exists = false; for (Service service : services) { if(service.getName().equalsIgnoreCase(newService.getName())){ exists = true; } } if(!exists){ services.add(newService); } } }
Langkah 5
Buat pengesan perkhidmatan.
ServiceLocator.java
public class ServiceLocator { private static Cache cache; static { cache = new Cache(); } public static Service getService(String jndiName){ Service service = cache.getService(jndiName); if(service != null){ return service; } InitialContext context = new InitialContext(); Service service1 = (Service)context.lookup(jndiName); cache.addService(service1); return service1; } }
Langkah 6
Gunakan ServiceLocator untuk menunjukkan corak reka bentuk Service Locator.
ServiceLocatorPatternDemo.java
public class ServiceLocatorPatternDemo { public static void main(String[] args) { Service service = ServiceLocator.getService("Service1"); service.execute(); service = ServiceLocator.getService("Service2"); service.execute(); service = ServiceLocator.getService("Service1"); service.execute(); service = ServiceLocator.getService("Service2"); service.execute(); } }
Langkah 7
Sahkan output.
rreeee