随笔分类 -  Design Patterns

摘要:命令模式(Command): 将请求封装成对象,这可以让你使用不同的请求、队列,或者日志请求来参数化其他对象。命令模式也可以支持撤销操作。个人感觉和策略模式有点像,其核心思想都是面向接口编程,以及多用组合,少用继承。定义的公共接口具有相同的方法,然后不同的个体根据不同的需要实现该方法,然后一些“消费类”再根据自身需要选择合适的实现个体,但是不是直接使用该个体,而是使用公共的接口及接口方法。只不过策略模式的接口定义的是比较实化的实在类型,接口方法定义成该实在类型所能具有的操作;命令模式的接口定义的是命令类型,接口方法定义成命令操作。命令模式比较方便的一点就是可以构造一大堆命令接口对象的集合,.. 阅读全文
posted @ 2012-05-27 21:31 ini_always 阅读(361) 评论(0) 推荐(0)
摘要:装饰模式(Decorator): 动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。将被装饰者作为装饰者的属性传入,被装饰者会提供一些功能,但通常这些功能不太能满足需求,故须在装饰者内部再根据需要提供额外的功能,被装饰者提供的功能和装饰者提供的额外功能共同完成某种需求。同时,装饰者还可以被包装成为被装饰者,外层装饰者再根据其它需要提供额外功能。ps:继承可以静态地扩展功能,装饰模式则可以动态地扩展功能。装饰模式最典型的就是Java IO了:new UpperCaseConvertReader ( new BufferedReader( new... 阅读全文
posted @ 2012-04-27 21:14 ini_always 阅读(310) 评论(0) 推荐(0)
摘要:观察者模式(Observer): 定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。这就是著名的“你不要找我,我会找你”模式,个人觉得这个模式相对来讲还是比较简单明了的,降低了消息发送者与消息接收者之间的耦合,消息接收由传统的拉模式转换为推模式,这样消息接收者就可以不用轮询是否有消息产生,节省资源。JDK的AWT/swing就大量使用了观察者模式,比如:Button btn = new Button("click me");btn.addActionListener(new ActionListener { public void ac 阅读全文
posted @ 2012-04-26 23:26 ini_always 阅读(245) 评论(0) 推荐(0)
摘要:策略模式(Strategy): 定义一组算法族,分别封装起来,它们之间可以相互替换。此模式让算法的变化独立于使用算法的客户。核心思想(个人理解): 1. 对于相互属于同一类但有不同特性的个体,它们绝对相同的行为使用继承实现;略有不同或者将来会有不同的行为使用组合实现。但总的来说,使用组合要好于使用继承。 2. 尽量面向接口编程,不要面向实体对象编程。以Spring的ServletContextListener为例:在web project开发中,需要将project放入一个Servlet容器运行(如tomcat),这时,需要一个ServletContextListener来监听并处理Co... 阅读全文
posted @ 2012-04-23 21:24 ini_always 阅读(292) 评论(0) 推荐(0)