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。 只
在C#中,事件是基于委托的特殊类型,用于实现发布者/订阅者模式。事件通常用于当一个类(发布者)想要通知其他类(订阅者)某些事情发生时。事件的声明通常包含`event`关键字,且只能在声明它的类内部被订阅或取消...
接着,通过`EndGate`和`DelGate`命令进一步清理环境,为新程序做好准备。然后,程序定义了一个坐标系,并指定电机3和电机4分别对应X轴和Y轴,计数单位为每毫米2180个脉冲。这一步骤是整个运动控制的基础,确保每个轴...
在这种情况下,可以使用触摸委托(Touch Delegate)模式,通过设置`delgate`属性来传递事件处理。 综上所述,斯坦福大学的这堂课程将深入探讨如何在iOS应用中利用多点触控事件和手势识别,使开发者能够创建更加动态...
python教程学习
tdac034.pdf
veclibm111111111111
nssm工具,进行2次解压后即可
视讯镜头优化,操作不走
【数据结构】的资源,包括书籍、在线课程和网站
北京大学-DeepSeek系列-提示词工程和落地场景.pdf.png
【财信国际经济研究院-2025研报】2025年2月CPI和PPI数据点评:通胀低于预期,内需亟待提振.pdf
【毕业设计】java-springboot+vue精品在线试题库系统源码(完整前后端+mysql+说明文档+LunW).zip
python安装-25.求 a 的 b 次方——有点不好意思哈.py
代码实现了自适应IMM(交互式多模型)算法,专注于对目标状态进行估计,并结合了匀速(CV)和匀加速(CA)运动模型。它使用自适应观测噪声估计和扩展卡尔曼滤波器(EKF)作为滤波主体,并在最后提供误差统计特性输出。
中产品工业物联网联网的基础功能,是企业开启数字化转型的入门之选。它能帮助企业快速搭建起基础的设备数据采集与监控体系,以较低成本实
北京大学DeepSeek系列-DeepSeek与AIGC应用.pdf.png
【毕业设计-java】springboot-vue基于多维分类的知识管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip
## 一、数据介绍 本数据参考C刊《管理评论》佟岩(2024)老师的做法,使用各年度省级政府工作报告中“减碳”关键词的词频总数来测度地方政府对“减碳”的重视程度,“减碳”关键词包括二氧化碳、低碳、减排、节能、能耗、环境保护(环保)、生态、绿色。 本数据包含:原始数据、参考文献、代码do文件、最终结果。 ## 二、参考文献: 佟岩,李鑫,徐国铨.企业集团碳减排压力与债务分布-来自高耗能上市公司的经验证据[J].管理评论,2024,36(02):210-221.DOI:10.14120/j.cnki.cn11-5057/f.2024.02.014 ## 三、相关数据:城市、城市编码、年份、减碳重视程度词频。
python教程学习