声明:这篇文章的设计思想来源于IBM中国技术网站的EJB最佳实践栏目,我仅在它的基础上进行优化设计!请指教! 
  
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 
##等等 
##Over 
  
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的反射机制来实现,有兴趣可前往: 
  
http://www-900.ibm.com/developerWorks/cn/java/j-ejb1119/index.shtml  
 
  |