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的反射机制来实现,有兴趣可前往:
分享到:
相关推荐
铁滑块过滤器用自己的方式过滤! 优酷: : KUN6bs9pl74 feature 简单来说FeSlideFilterView 是 UIView 的子类。 带来新的方式来显示您的照片。...如何使用FeSlideFilter 使用数据源/Delgate 模式,如 UITableView。 只
iOS开发·KVO用法,原理与底层实现: runtime模拟实现KVO监听机制(Blcok及Delgate方式).zip,iOS开发·KVO用法,原理与底层实现: runtime模拟实现KVO监听机制(Blcok及Delgate方式)
在C#中,事件是基于委托的特殊类型,用于实现发布者/订阅者模式。事件通常用于当一个类(发布者)想要通知其他类(订阅者)某些事情发生时。事件的声明通常包含`event`关键字,且只能在声明它的类内部被订阅或取消...
接着,通过`EndGate`和`DelGate`命令进一步清理环境,为新程序做好准备。然后,程序定义了一个坐标系,并指定电机3和电机4分别对应X轴和Y轴,计数单位为每毫米2180个脉冲。这一步骤是整个运动控制的基础,确保每个轴...
在这种情况下,可以使用触摸委托(Touch Delegate)模式,通过设置`delgate`属性来传递事件处理。 综上所述,斯坦福大学的这堂课程将深入探讨如何在iOS应用中利用多点触控事件和手势识别,使开发者能够创建更加动态...
2.提供了block方法而不是delgate方法。3.除了简单的用法外,它还可以根据字符串自动检测语言。 4.可高亮当前被读的单词。 5.可自动滚动页面直至文本底部。 6.可读出所有AVSpeechSynthesizer支持的语言。 7.可列出...
- invoke, delgate(내일 배울 것) - 위 대신에 글로벌변수에 저장 후 타이머tick마다 tbServer.Text에 Lect 3-创建2个项目(服务器,客户端),并发送和接收1个数据包/安装文件(ini) ComServer项目的FormServer....
本文实例讲述了C#监控... 代码如下:public delgate void FileSystemEventHandler(Object sender, FileSystemEventArgs e) 其中参数: sender表示事件的发起者 e表示事件参数 在C盘创建temp文件夹。 客户端。 代码