In business tier we've following entities.
Client - Presentation tier code may be JSP, Asp, servlet or UI code.using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Business_Delegate { class Client { BusinessDelegate businessService; public Client(BusinessDelegate businessService) { this.businessService = businessService; } public void doTask() { businessService.doTask(); } } }Business Delegate - A single entry point class for client entities to provide access to Business Service methods.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Business_Delegate { public class BusinessDelegate { private BusinessLookUp lookupService = new BusinessLookUp(); private BusinessService businessService; private String serviceType; public void setServiceType(String serviceType) { this.serviceType = serviceType; } public void doTask() { businessService = lookupService.getBusinessService(serviceType); businessService.doProcessing(); } } }LookUp Service - Lookup service object is responsible to get relative business implementation and provide business object access to business delegate object.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Business_Delegate { class BusinessLookUp { public BusinessService getBusinessService(String serviceType) { if (serviceType.Equals("EJB")) { return new Services.Service1(); } else { return new Services.Service2(); } } } }Business Service - Business Service interface. Concrete classes implements this business service to provide actual business implementation logic.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Business_Delegate { interface BusinessService { void doProcessing(); } }and services as Service1
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Business_Delegate.Services { class Service1:BusinessService { public void doProcessing() { Console.WriteLine("Service 1 invoked"); } } }and Service2
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Business_Delegate.Services { class Service2:BusinessService { public void doProcessing() { Console.WriteLine("Service 2 invoked"); } } }
To use these we need a main methods as
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Business_Delegate { class BusinessDelegatePatternDemo { public static void main(String[] args) { BusinessDelegate businessDelegate = new BusinessDelegate(); businessDelegate.setServiceType("WCF"); Client client = new Client(businessDelegate); client.doTask(); businessDelegate.setServiceType("EJB"); client.doTask(); } } }