论坛首页 Java企业应用论坛

讨论几个常用的模式

浏览 19154 次
该帖已经被评为精华帖
作者 正文
   发表时间:2010-12-11  

0、资源管理模式

这个不算是个模式,我的大概意思是,在一个托管的环境(jvm  clr)或是其他环境中,如果需要使用外部的(独占的)资源,

一般都需要显式的initialize和dispose(close)。因为这个资源一般可以被其他地方使用,需要释放掉持有的锁。

比如,文件/网络io,bitmap/graphics等等。

 

 

1、池化技术(pool)

 

一般来说,我们要使用某个资源,初始化,获得实例,使用,关闭,即可。

如果这个资源的创建代价比较昂贵,我们可以使用singleton的方式,管理一个实例。但是一个实例不够用怎么办?创建多个!

这样就有了一组实例了。我们就需要管理这一个池了。例如线程池,数据库连接池,网络连接池。池是singleton的一个自然延伸。

如果我们不清楚多大合适,可以设置一个初始大小。不停的创建,肯定是不合适的(outofmemory),资源总会耗尽。所以,设定一个最大值,超过了拒绝或是排队。然后再做一些其他的管理上的策略。比如线程池的大量并发时的拒绝策略。比如数据库连接池,为了使基于池的使用依然是原来的jdbc方式,同样的connection,open,close。一般采取封装一层驱动的方式。使得实际使用的connection里包含一个真正的jdbc驱动的connection,close时只是标记了connection的状态,置为空闲,并不真正的close原生的connection。

 

数据缓存是另一种池化技术的应用。关注的是直接可用的业务数据,而不是获取数据的外部资源。这方面的讨论时很多的。几个点:缓存策略,命中率,同步,集群等等。

 

2、上下文模式(context)

这个模式很常见,在j2ee servletContext,jsf  facesContext,esb  messageContext,workflow workflowContext等等地方,都有它的存在。

通常来说,如果一个大的处理流程,被设计成几个不同的处理阶段,组成一个回路,那么,我们可以把环境相关的信息,流程相关的变量和中间结果,流程中要传递的消息和数据,都放到上下文这个容器里。这些,主流程中,传递的就不再只是消息数据,而是尽可能多的信息。在主流程中处理的是context,可以修改其中的任何可修改信息,转换。在中间的分支,或拦截器、过滤器中,我们可以传递数据,做其他处理(拦截,log,monitor),不影响主流程中的处理。主流程的任何处理点,都可以使用一致的context,获取任何需要的信息。

 

 

 

 

 

 

   发表时间:2010-12-13  
楼主总结的很好,但是不够细节,比如池化技术,任何一个点都可以写一大篇介绍下,期待大作!
0 请登录后投票
   发表时间:2010-12-13  
期待楼主 的自己对这个的详细理解
0 请登录后投票
   发表时间:2010-12-13  
全是精华哪……

看来定是神帖,保存下来好好研究

另外,关于那个Context,如果工作流中有分支,对于分支中的Context,是复制Clone,还是使用同一个Context,还是新建,楼主有没有这方面的建议。
0 请登录后投票
   发表时间:2010-12-13  
期待进一步的解释。楼主提供了一个很好的思路
0 请登录后投票
   发表时间:2010-12-14  
常用的模式不止这些吧!哈哈!

期待楼主大作。。
0 请登录后投票
   发表时间:2010-12-14  
楼主 请详细点
0 请登录后投票
   发表时间:2010-12-14  
jy1245626 写道
如此精华!?

什么样的可以精华呢?
0 请登录后投票
   发表时间:2010-12-15  
很明显在刷帖 这种空洞的帖子居然精华
0 请登录后投票
   发表时间:2010-12-15  
躁动的绵羊 写道
很明显在刷帖 这种空洞的帖子居然精华

什么样子的帖子时不空洞的呢?

1、一个hello world式的 代码
2、搭建了一个xx开发环境(有图有真相)
3、struts/hibernate xxx问题

---------------------------

发点思考的内容,就是空洞的,不能投精华吗?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics