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();
}
}
}