`
tomrose
  • 浏览: 147887 次
  • 来自: ...
社区版块
存档分类
最新评论

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的反射机制来实现,有兴趣可前往:

分享到:
评论

相关推荐

    FeSlideFilter:用手指应用过滤器

    铁滑块过滤器用自己的方式过滤! 优酷: : KUN6bs9pl74 feature 简单来说FeSlideFilterView 是 UIView 的子类。 带来新的方式来显示您的照片。...如何使用FeSlideFilter 使用数据源/Delgate 模式,如 UITableView。 只

    iOS开发·KVO用法,原理与底层实现: runtime模拟实现KVO监听机制(Blcok及Delgate方式).zip

    iOS开发·KVO用法,原理与底层实现: runtime模拟实现KVO监听机制(Blcok及Delgate方式).zip,iOS开发·KVO用法,原理与底层实现: runtime模拟实现KVO监听机制(Blcok及Delgate方式)

    C#下的Delagate实例

    在C#中,事件是基于委托的特殊类型,用于实现发布者/订阅者模式。事件通常用于当一个类(发布者)想要通知其他类(订阅者)某些事情发生时。事件的声明通常包含`event`关键字,且只能在声明它的类内部被订阅或取消...

    pmac运动程序

    接着,通过`EndGate`和`DelGate`命令进一步清理环境,为新程序做好准备。然后,程序定义了一个坐标系,并指定电机3和电机4分别对应X轴和Y轴,计数单位为每毫米2180个脉冲。这一步骤是整个运动控制的基础,确保每个轴...

    斯坦福大学iPhone教程-14.zip

    在这种情况下,可以使用触摸委托(Touch Delegate)模式,通过设置`delgate`属性来传递事件处理。 综上所述,斯坦福大学的这堂课程将深入探讨如何在iOS应用中利用多点触控事件和手势识别,使开发者能够创建更加动态...

    支持AVSpeechsynthesizer集成到应用

    2.提供了block方法而不是delgate方法。3.除了简单的用法外,它还可以根据字符串自动检测语言。 4.可高亮当前被读的单词。 5.可自动滚动页面直至文本底部。 6.可读出所有AVSpeechSynthesizer支持的语言。 7.可列出...

    IoT-216_Network-Programming

    - invoke, delgate(내일 배울 것) - 위 대신에 글로벌변수에 저장 후 타이머tick마다 tbServer.Text에 Lect 3-创建2个项目(服务器,客户端),并发送和接收1个数据包/安装文件(ini) ComServer项目的FormServer....

    C#监控文件夹变化的方法

    本文实例讲述了C#监控... 代码如下:public delgate void FileSystemEventHandler(Object sender, FileSystemEventArgs e) 其中参数: sender表示事件的发起者 e表示事件参数 在C盘创建temp文件夹。 客户端。 代码

Global site tag (gtag.js) - Google Analytics