delgate 模式

business delgate 模式(业务委派模式)
主要是解决web层和业务层之间的偶合,利用委派模式隐藏具体接口的实现,将接口的实现类放在配置文件中。

 
1,   设计一个业务接口,代码如下:
public interface Business{
}// 它什么都不做
 
2,   本例中我们假设对 Book 进行业务设计,按面象接口编程思想,我们应该从业务方法中抽取接口来,示例代码如下:
pubic interface BookInterface extends Business{
      public Long createBook()throws BookException;
      public List findAll()throws BookException;
      public List findSellTop10()throws BookException;
}
 
3,   顺手推“船”,我们现在来实现这个业务接口,示例代码如下:
 
public class BookImpl implements BookInterface{
 
private DaoFactory daoFactory;
private BookDao bookDao;
 
public BookImpl(){
// 初始化 DAO 工厂
}
 
public Long createBook(Book book)throws BookException{
// 初始化 bookDao
return dao.create(book);
// 释放 bookDao 资源
// 异常处理
}
 
public List findAll()throws BookException{

}
 
public List findSellTop10()throws BookException{

}
 
}
 
4. 从上面的代码看,利用DAO模式和工厂模式,我们的业务层已经很好的和持久层保持良好的耦合度了,那么在业务层和表示层之间的耦合度呢?我们利用业务委派模式来设计:
 
public interface Delegate{
 
}// 业务委派接口
 
  public class BookDelegate implements Delegate{
 
private static final String MY_NAME=”Book”;
 
private BusinessFactory businessFactory;// 单例模式
 
private BookInterface interface;// 这是接口
 
public BookDelegate(){
init();
}
 
public Long createBook(Book book){
return interface.createBook(book);
}
public List findAll(){
return interface.findAll();
}
public List findSellTop10(){
return interface.findSellTop10();
}
 
private void init(){
businessFactory=BusinessFactory.getInstance();
interface=(BookInterface)businessFactory.createBusiness(MY_NAME);
}
private void destroy(){
}
}
 
现在,我们来揭开 BusinessFactory 的面纱了, BusinessFactory 需要一个配置文件, business.properties ,这个文件示例如下:
Business.properties
Book=net.huisky.test.business.BookImpl;
Bean=net.huisky.test.business.BeanImpl 

 
public class BusinessFactory{// 单例模式
 
private BusinessFactory myself;
private Properties props;
 
private BusinessFactory(){
init();
}
 
 
private void init(){
读取 business.properties, 初始化 props;
}
 
public Business createBusiness(String name){
return (Business)Class.forName(props.getProperty(mame));
//处理异常
}
}
 
结果:在Servlet中,我们只要
BookDelegate delegate=new BookDelegate();
就可以调用业务方法了,而且delegate里面使用的是接口,不是实现类
假如你要重写业务方法,你大可不必更改Servlet中代码的调用
只要重写一个BeanImpl即可!
另:业务委派类可以写得更加灵活,那就是利用动态委派,它是利用JAVA的反射机制来实现,有兴趣可前往:

你可能感兴趣的:(DAO,设计模式,编程,bean,servlet)