随笔分类 -  设计模式

Struts2中的设计模式----ThreadLocal模式
摘要:http://www.cnblogs.com/gw811/archive/2012/09/07/2675105.html设计模式(Design pattern):是经过程序员反复实践后形成的一套代码设计经验的总结。 ThreadLocal模式:用来解决多线程程序中数据共享问题的一个方案。 1、线程安全问题的由来 在传统的Web开发中,我们处理Http请求最常用的方式是通过实现Servlet对象来进行Http请求的响应。Servlet是J2EE的重要标准之一,规定了Java如何响应Http请求的规范。通过HttpServletRequest和HttpServletResponse对象,我... 阅读全文

posted @ 2013-11-22 16:16 heartstage 阅读(326) 评论(0) 推荐(0)

享元模式(Flyweight)
摘要:一. 世间万物皆为对象从大学校园中拦住一个软件工程专业的学生,问他,什么是面向对象。他会告诉你,世间万物皆是对象。世界之大,何止万物。上至宇宙星辰,下至细菌病毒。皆为对象。女孩,吐气如兰,仍留淡淡余香。男孩,闭眼陶醉,不亦乐乎。此乃共享之妙也!二. 对象爆炸呼吸之间,分子无数。每个分子皆为一对象,恐万台服务器之矩阵亦无可容。奈何乎?GOF 曰: 享元模式!三. 何为享元模式Flyweight : 次最轻量级的拳击选手。即粒度最小。因此,享元模式的目的是采用共享技术解决大量细粒度对象的爆炸问题。图: 四. 享元模式应用之QQ聊天我们不妨假设QQ是在服务器端将每次的对话都抽象出来形成了一个类。于是 阅读全文

posted @ 2013-11-22 16:06 heartstage 阅读(248) 评论(0) 推荐(0)

Spring IOC的实现探讨
摘要:http://www.blogjava.net/killme2008/archive/2007/04/20/112160.htmlhttp://www.iteye.com/magazines/71 阅读全文

posted @ 2013-11-14 15:24 heartstage 阅读(161) 评论(0) 推荐(0)

设计模式之不变模式(Immutable Pattern)分析
摘要:http://www.iteye.com/topic/959751最近老有人问我不变模式,我其实也理解得不深,于是花了一些时间进行学习总结,分析了一下不变模式(immutable pattern),和大家一起分享。说得不对的地方欢迎拍砖,谢绝谩骂。姐妹篇:精通有状态vs无状态(Stateful vs Stateless).http://www.iteye.com/topic/960532 不变模式(immutable pattern) 一个类的内部状态创建后,在整个生命期间都不会发生变化时,就是不变类。这种使用不变类的做法叫做不变模式。 不变模式有两种形式:一种是弱不变模式,另一种是强不变模式 阅读全文

posted @ 2013-11-06 03:07 heartstage 阅读(377) 评论(0) 推荐(0)

一个错误使用单例模式的场景及ThreadLocal简析
摘要:近来参与一个Java的web办公系统,碰到一个bug,开始猜测是线程池管理的问题,最后发现是单例模式的问题。即,当同时发起两个事务请求时,当一个事务完成后,另一个事务会抛出session is closed异常。具体见下图:至于,下面这种情况,当时也测试过,但问题情形忘了,手上没有数据库环境,无法进行测试:最开始,个人认为是session管理的问题,比如,在关闭session的时候,会同时关闭先前打开的session。由于下面采用的是其他公司的框架,所以就反馈给了技术总监。后来,反馈给我,竟然是单例的问题。简单看了一下本系统,其在框架基础上又封装了一层,涉及这个bug的类关系如下:发现原来设想 阅读全文

posted @ 2013-11-06 03:05 heartstage 阅读(1612) 评论(0) 推荐(0)

Java IO设计模式
摘要:JAVAIO设计模式彻底分析2011-01-0614:20:09|分类:java|字号订阅http://blog.csdn.net/tianyue168/archive/2010/08/03/5786642.aspx 一。引子(概括地介绍Java的IO) 无论是哪种编程语言,输入跟输出都是重要的一部分,Java也不例外,而且Java将输入/输出的功能和使用范畴做了很大的扩充。它采用了流的机制来实现输入/输出,所谓流,就是数据的有序排列,而流可以是从某个源(称为流源或SourceofStream)出来,到某个目的地(称为流汇或SinkofStream)去的。由流的方向,可以分成输入流和输出流,. 阅读全文

posted @ 2013-10-27 18:10 heartstage 阅读(600) 评论(0) 推荐(0)

Java IO 流 设计模式
摘要:学过装饰模式后,大家会发现,它在Java语言中最著名的应用莫过于Java I/O标准为库的设计了。这一节将以处理Byte流为例,看看装饰模式是怎样得到应用的。 为什么不用继承而用装饰模式 我们知道Java I/O库需要很多性能的各种组合,如果说这些性能的组合是通过继承方式来实现的话,那么每一种组合都需要一个类,这样就会出现大量重复性问题的出现,从而使类数目“爆炸”。而如果采用装饰模式,那么不仅类的数目大减少了,性能的重复也可以减至到最少。所以装饰模式是Java I/O库的基本模式。在这里我想再用>中讲到装饰模式时候的一个例子,看看装饰模式是怎么达到不仅类的数目大减少了,性能的重复也可以减 阅读全文

posted @ 2013-10-27 18:07 heartstage 阅读(2399) 评论(0) 推荐(0)

研磨设计模式 - 适配器模式
摘要:4.1 场景问题4.1.1 装配电脑的例子1:旧的硬盘和电源小李有一台老的台式电脑,硬盘实在是太小了,仅仅40GB,但是除了这个问题外,整机性能还不错,废弃不用太可惜了,于是决定去加装一块新的硬盘。在装机公司为小李的电脑加装新硬盘的时候,小李也在边上观看,顺便了解点硬件知识。很快的,装机人员把两块硬盘都安装好了,细心的小李发现,这两块硬盘的连接方式是不一样的。经过装机人员的耐心讲解,小李搞清楚了它们的不同。以前的硬盘是串口的,如图4.1,电脑电源如图4.2,那么连接电源的时候是直接连接。2:加入新的硬盘但是现在的新硬盘是并口的,如图4.3,电源的输出口无法直接连接到新的硬盘上了,于是就有了转接 阅读全文

posted @ 2013-10-16 02:28 heartstage 阅读(533) 评论(0) 推荐(0)

研磨设计模式 - 策略模式
摘要:策略模式(Strategy)1 场景问题1.1 报价管理 向客户报价,对于销售部门的人来讲,这是一个非常重大、非常复杂的问题,对不同的客户要报不同的价格,比如:对普通客户或者是新客户报的是全价对老客户报的价格,根据客户年限,给予一定的折扣对大客户报的价格,根据大客户的累计消费金额,给予一定的折扣还要考虑客户购买的数量和金额,比如:虽然是新用户,但是一次购买的数量非常大,或者是总金额非常高,也会有一定的折扣还有,报价人员的职务高低,也决定了他是否有权限对价格进行一定的浮动折扣 甚至在不同的阶段,对客户的报价也不同,一般情况是刚开始比较高,越接近成交阶段,报价越趋于合理。 总之,向客户报价是非常. 阅读全文

posted @ 2013-10-16 01:17 heartstage 阅读(413) 评论(0) 推荐(0)

研磨设计模式 - 代理模式
摘要:11.1 场景问题11.1.1 访问多条数据 考虑这样一个实际应用:要一次性访问多条数据。 这个功能的背景是这样的;在一个HR(人力资源)应用项目中客户提出,当选择一个部门或是分公司的时候,要把这个部门或者分公司下的所有员工都显示出来,而且不要翻页,好方便他们进行业务处理。在显示全部员工的时候,只需要显示名称即可,但是也需要提供如下的功能:在必要的时候可以选择并查看某位员工的详细信息。 客户方是一个集团公司,有些部门或者分公司可能有好几百人,不让翻页,也就是要求一次性的获取这多条数据并展示出来。 该怎么样实现呢?11.1.2 不用模式的解决方案 不就是要获取某个部门或者某个分公司下的所有员工的 阅读全文

posted @ 2013-10-16 00:50 heartstage 阅读(258) 评论(0) 推荐(0)

研磨设计模式 - 观察者模式
摘要:12.1 场景问题12.1.1 订阅报纸的过程来考虑实际生活中订阅报纸的过程,这里简单总结了一下,订阅报纸的基本流程如下:首先按照自己的需要选择合适的报纸,具体的报刊杂志目录可以从邮局获取。选择好后,就到邮局去填写订阅单,同时交上所需的费用。至此,就完成了报纸的订阅过程,接下去的就是耐心等候,报社会按照出报时间推出报纸,然后报纸会被送到每个订阅人的手里。 画个图来描述上述过程,如图12.1所示:图12.1 订阅报纸的过程示意图虽然看起来订阅者是直接跟邮局在打交道,但实际上,订阅者的订阅数据是会被邮局传递到报社的,当报社出版了报纸,报社会按照订阅信息把报纸交给邮局,然后由邮局来代为发送到订阅者的 阅读全文

posted @ 2013-10-15 19:48 heartstage 阅读(375) 评论(0) 推荐(0)

研磨设计模式 - 关于单例模式
摘要:单例模式(Singleton)1 场景问题1.1 读取配置文件的内容 考虑这样一个应用,读取配置文件的内容。 很多应用项目,都有与应用相关的配置文件,这些配置文件多是由项目开发人员自定义的,在里面定义一些应用需要的参数数据。当然在实际的项目中,这种配置文件多采用xml格式的。也有采用properties格式的,毕竟使用Java来读取properties格式的配置文件比较简单。 现在要读取配置文件的内容,该如何实现呢?1.2 不用模式的解决方案 有些朋友会想,要读取配置文件的内容,这也不是个什么困难的事情,直接读取文件的内容,然后把文件内容存放在相应的数据对象里面就可以了。真的这么简单吗?先.. 阅读全文

posted @ 2013-10-15 18:38 heartstage 阅读(254) 评论(0) 推荐(0)

Spring 框架的设计理念与设计模式分析
摘要:简介:Spring 作为现在最优秀的框架之一,已被广泛的使用,并且有很多对其分析的文章。本文将从另外一个视角试图剖析出 Spring 框架的作者设计 Spring 框架的骨骼架构的设计理念,有那几个核心组件?为什么需要这些组件?它们又是如何结合在一起构成 Spring 的骨骼架构? Spring 的 AOP 特性又是如何利用这些基础的骨骼架构来工作的? Spring 中又使用了那些设计模式来完成它的这种设计的?它的这种设计理念对对我们以后的软件设计有何启示?本文将详细解答这些问题。Spring 的骨骼架构Spring 总共有十几个组件,但是真正核心的组件只有几个,下面是 Spring 框架的总 阅读全文

posted @ 2013-10-11 16:34 heartstage 阅读(230) 评论(0) 推荐(0)

行为型模式
摘要:1)观察者模式定义:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。绘图:场景:附注:Subject可翻译为主题或抽象通知者,一般用一个抽象类或者一个接口实现。它把所有对观察者对象的引用保存在一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象。Observer抽象观察者,为所有的具体观察者定义一个接口,在得到主题的通知时更新自己。这个接口叫做更新接口。抽象观察者一般用一个抽象类或者一个接口实现。更新接口通常包含一个方法,这个方法叫做更新方法。Concrete 阅读全文

posted @ 2013-10-11 12:37 heartstage 阅读(252) 评论(0) 推荐(0)

结构型模式
摘要:1)适配器模式Adapter定义:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。绘图:场景/应用:附注:在《设计模式》中,对适配器模式讲了两种类型,类适配器模式和对象适配器模式,由于类适配器模式通过多重继承对一个接口与另一个接口进行匹配,而java等语言都不支持多重继承,也就是一个类只有一个父类,所以我们这里主要讲的是对象适配器。在软件幵发中,也就是系统的数据和行为都正确,但接口不符时,我们应该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况,比 阅读全文

posted @ 2013-10-11 12:36 heartstage 阅读(213) 评论(0) 推荐(0)

设计模式详述 - 创建型
摘要:请特别注意:1.使用的是抽象类还是接口;2.UML图中依赖、聚合和组合的关系;3.属性的访问控制权限;1)工厂方法FactoryMethod定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类绘图:场景/应用:?附注:简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。违背的是幵放-封闭原则。既然这个工厂类与分支耦合,那么我就对它下手,根据依赖倒转原则,我们把工厂类抽象出一个接口,这个接口只有一个方法,就是创建抽象产品的工厂方法。然后,所有的要生产具体类的工厂,就去实 阅读全文

posted @ 2013-10-11 12:25 heartstage 阅读(241) 评论(0) 推荐(0)

Spring Struts里用到的设计模式
摘要:Bean工厂的Factory模式AOP的Proxy模式 阅读全文

posted @ 2013-10-11 12:07 heartstage 阅读(219) 评论(0) 推荐(0)

谈谈MVC模式
摘要:MVC的优点(1)可以为一个模型在运行时同时建立和使用多个视图。变化-传播机制可以确保所有相关的视图及时得到模型数据变化,从而使所有关联的视图和控制器做到行为同步。(2)视图与控制器的可接插性,允许更换视图和控制器对象,而且可以根据需求动态的打开或关闭、甚至在运行期间进行对象替换。(3)模型的可移植性。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。需要做的只是在新平台上对视图和控制器进行新的修改。(4)潜在的框架结构。可以基于此模型建立应用程序框架,不仅仅是用在设计界面的设计中。MVC的不足之处(1)增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视 阅读全文

posted @ 2013-10-11 12:07 heartstage 阅读(208) 评论(0) 推荐(0)

JDK/Java里的设计模式
摘要:JDK/Java里的设计模式 阅读全文

posted @ 2013-10-11 12:06 heartstage 阅读(148) 评论(0) 推荐(0)

设计模式的设计原则和精神
摘要:设计模式是什么(1)反复出现问题的解决方案(2)增强软件的灵活性(3)适应软件不断变化Maintainbility&Reusabilityl单一职责原则就一个类而言,应该仅有一个引起它变化的原因。【SRP】如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责。l开放-封闭原则Open-ClosedPrinciple开闭原则,对于 阅读全文

posted @ 2013-10-11 12:04 heartstage 阅读(245) 评论(0) 推荐(0)

导航