- 浏览: 464617 次
- 性别:
- 来自: 北京
最新评论
-
lm818:
最近一直在看设计模式,发现写的那本研磨真的不错,容易理解,能看 ...
大讨论:学习和应用设计模式的经验、教训、疑问等 -
yjfnwxf:
看了楼主博文,真为自己汗颜呀。。。。努力,再努力
研磨设计模式之命令模式-5 -
fengdandanweikang:
...
研磨设计模式 之 观察者模式(Observer) 1——跟着cc学设计系列 -
tiansong163:
你好,对《研磨设计模式》中UML有一个图标不知道是什么意思?希 ...
跟着cc学设计 之 研磨设计模式 目录汇总贴 -
soualliron:
国人就会溜须拍马,文章冠题“大讨论”,下面全是附会之音,无切实 ...
大讨论:学习和应用设计模式的经验、教训、疑问等
文章列表
《研磨设计模式》——跟着CC学设计,视频课程在 私塾在线 上线啦!
想学习设计模式的朋友可以前去看看。
本视频课程是北京Java私塾原创精品书籍《研磨设计模式》一书的配套学习视频,由《研磨设计模式》的第一作者CC录制
软件开发越来越复杂,对软件设计的要求也越来越高,而软件设计和架构的入门功夫就是深入理解和掌握设计模式,因此,计模式的重要性不言而喻。
很多朋友也认识到了设计模式的重要性,也看了很多的书籍和资料,但是,常听到他们这样的抱怨:“设计模式的书我看了不少,觉得都看懂了,就是不知道在实际开发中怎么用这些设计模式”,从而认为设计模式是“看上去很美的花拳绣腿 ...
研磨设计模式 的 前言 ——跟着cc学设计系列
《研磨设计模式》 配套源代码 ——跟着cc学设计系列
研磨设计模式之工厂方法模式-1 ——跟着cc学设计系列
[置顶] 研磨Struts2 目录
- 博客分类:
- struts2
私塾在线学习网原创学习教程
《研磨struts2》 第一章 Struts2概述 之 MVC模式
《研磨struts2》 第一章 Struts2概述 之 Struts2基础
《研磨struts2》 第一章 Struts2概述 之 Struts2和MVC
15.3 模式讲解
15.3.1 认识组合模式
(1)组合模式的目的
组合模式的目的是:让客户端不再区分操作的是组合对象还是叶子对象,而是以一个统一的方式来操作。
实现这个目标的关键之处,是设计一个抽象的组件类,让它可以代表组合对象和叶子对象。这样一来,客户端就不用区分到底是组合对象还是叶子对象了,只需要全部当成组件对象进行统一的操作就可以了。
(2)对象树
通常,组合模式会组合出树形结构来,组成这个树形结构所使用的多个组件对象,就自然的形成了对象树。
这也意味着凡是可以使用对象树来描述或操作的功能,都可以考虑使用组合模式,比如读取XML文件,或是对语句进行语法解析等。
...
15.2 解决方案
15.2.1 组合模式来解决
用来解决上述问题的一个合理的解决方案就是组合模式。那么什么是组合模式呢?
(1)组合模式定义
(2)应用组合模式来解决的思路
仔细分析上面不用模式的例子中,要区分组合对象和叶子对象的根本原因,就在于没有把组合对象和叶子对象统一起来,也就是说,组合对象类型和叶子对象类型是完全不同的类型,这导致了操作的时候必须区分它们。
组合模式通过引入一个抽象的组件对象,作为组合对象和叶子对象的父对象,这样就把组合对象和叶子对象统一起来了,用户使用的时候,始终是在操作组件对象,而不再去区分是在操作组合对象还是 ...
15.1 场景问题
15.1.1 商品类别树
考虑这样一个实际的应用:管理商品类别树。
在实现跟商品有关的应用系统的时候,一个很常见的功能就是商品类别树的管理,比如有如下所示的商品类别树:
+服装
+男装
-衬衣
-夹克
+女装
-裙子
-套装
...
14.3 模式讲解
14.3.1 认识迭代器模式
(1)迭代器模式的功能
迭代器模式的功能主要在于提供对聚合对象的迭代访问。迭代器就围绕着这个“访问”做文章,延伸出很多的功能来。比如:
以不同的方式遍历聚合对象,比 ...
14.2 解决方案
14.2.1 迭代器模式来解决
用来解决上述问题的一个合理的解决方案就是迭代器模式。那么什么是迭代器模式呢?
(1)迭代器模式定义
所谓聚合是:指一组对象的组合结构,比如:Java中的集合、数组等。 ...
14.1 场景问题
14.1.1 工资表数据的整合
考虑这样一个实际应用:整合工资表数据。
这个项目的背景是这样的,项目的客户方收购了一家小公司,这家小公司有自己的工资系统,现在需要整合到客户方已 ...
12.3 模式讲解
12.3.1 认识观察者模式
(1)目标和观察者之间的关系
按照模式的定义,目标和观察者之间是典型的一对多的关系。
但是要注意,如果观察者只有一个,也是可以的,这样就变相实现了目标和观察者之间一对一的关系,这也使得在处理一个对象的状态变化会影响到另一个对象的时候,也可以考虑使用观察者模式。
同样的,一个观察者也可以观察多个目标,如果观察者为多个目标定义的通知更新方法都是update方法的话,这会带来麻烦,因为需要接收多个目标的通知,如果是一个update的方法,那就需要在方法内部区分,到底这个更新的通知来自于哪一个 ...
12.2 解决方案
12.2.1 观察者模式来解决
用来解决上述问题的一个合理的解决方案就是观察者模式。那么什么是观察者模式呢?
(1)观察者模式定义
(2)应用观察者模式来解决的思路
在前面描述的订阅报纸的例子 ...
12.1 场景问题
12.1.1 订阅报纸的过程
来考虑实际生活中订阅报纸的过程,这里简单总结了一下,订阅报纸的基本流程如下:
首先按照自己的需要选择合适的报纸,具体的报刊杂志目录可以从邮局获取。
选择好后,就到邮局去填写订阅单,同时交上所需的费用。
至此,就完成了报纸的订阅过程,接下去的就是耐心等候,报社会按照出报时间推出报纸,然后报纸会被送到每个订阅人的手里。
画个图来描述上述过程,如图12.1所示:
图12.1 订阅报纸的过程示意图
11.3 模式讲解
11.3.1 认识代理模式
(1)代理模式的功能
代理模式是通过创建一个代理对象,用这个代理对象去代表真实的对象,客户端得到这个代理对象过后,对客户端没有什么影响,就跟得到了真实对象一样来使用。
当客户端操作这个代理对象的时候,实际上功能最终还是会由真实的对象来完成,只不过是通过代理操作的,也就是客户端操作代理,代理操作真正的对象。
正是因为有代理对象夹在客户端和被代理的真实对象中间,相当于一个中转,那么在中转的时候就有很多花招可以玩,比如:判断一下权限,如果没有足够的权限那就不给你中转了,等等。
(2)代理的分类
11.2 解决方案
11.2.1 代理模式来解决
用来解决上述问题的一个合理的解决方案就是代理模式。那么什么是代理模式呢?
(1)代理模式定义
(2)应用代理模式来解决的思路
仔细分析上面的问题,一次性访问多条数据,这个可能性是很难避免的,是客户的需要。也就是说,要想节省内存,就不能从减少数据条数入手了,那就只能从减少每条数据的数据量上来考虑。
一个基本的思路如下:由于客户访问这多条用户数据的时候,基本上只需要看到用户的姓名,因此可以考虑刚开始从数据库查询返回的用户数据就只有用户编号和用户姓名,当
11.1 场景问题
11.1.1 访问多条数据
考虑这样一个实际应用:要一次性访问多条数据。
这个功能的背景是这样的;在一个HR(人力资源)应用项目中客户提出,当选择一个部门或是分公司的时候,要把这个部门或者分公司下的所有员工都显示出来,而且不要翻页,好方便他们进行业务处理。在显示全部员工的时候,只需要显示名称即可,但是也需要提供如下的功能:在必要的时候可以选择并查看某位员工的详细信息。
客户方是一个集团公司,有些部门或者分公司可能有好几百人,不让翻页,也就是要求一次性的获取这多条数据并展示出来。
该怎么样实现呢?
1 ...