.NET乐园
一个梦想,一个行动…… (欢迎光临我的淘宝http://shop35795100.taobao.com,专营休闲服饰和运动鞋)
博客园
首页
新随笔
新文章
联系
订阅
管理
posts - 47,comments - 119,trackbacks - 35
<
2007年8月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
给我留言
查看留言
我参与的团队
广州.NET俱乐部(0/1739)
ASP.NET AJAX (Atlas)学习(0/1353)
随笔分类
Ajax & Atlas(1)
ASP.NET(3)
SharePoint(2)
Visual Studio.NET(1)
电影音乐(2)
架构设计(25)
开发综合(2)
生活点滴(9)
项目管理(1)
随笔档案
2008年6月 (1)
2008年1月 (1)
2007年11月 (2)
2007年10月 (1)
2007年9月 (5)
2007年8月 (5)
2007年7月 (7)
2007年6月 (13)
2007年5月 (4)
2006年8月 (2)
2006年6月 (1)
2006年5月 (1)
2006年3月 (3)
文章分类
Visual Studio.NET
人生哲理(1)
生活感悟
影视娱乐
相册
花卉植物
收藏夹
ASP.NET(5)
SQL Server(1)
Visual Studio.NET
管理精髓(1)
.NET
AJAX学习Blog
Atlas官方
管理知识
经理世界网
最新评论
1. re: 设计模式学习笔记二十——Memento模式
卖女朋友不?我买个, 呵呵
--麦壳
阅读排行榜
1. 内容发布系统的开发(6213)
2. 提升软件的用户体验(3078)
3. 随便谈谈最近参与的2个项目(1706)
4. 编译.NET项目提示“找不到系统命名空间,请添加系统组件的引用”问题的解决方法(该组件已被该项目正确引用)(951)
5. 关于Atlas Client Library(788)
评论排行榜
1. 内容发布系统的开发(40)
2. 随便谈谈最近参与的2个项目(23)
3. 提升软件的用户体验(17)
4. 把WebForm数据导出到Excel中(7)
5. 中奖的幸运与不幸(6)
设计模式学习笔记二十三——TemplateMethod模式
动机
:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。本模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
场景
:以最近开发的一个WebPart为例,实现能以当前站点和任一站点列表库作为数据源显示前几条数据的列表WebPart(此处仅考虑普通列表库和文档库,至于其他库可通过子类扩展)。定义BaseDataListWebPart作为列表WebPart基类,TopDataListWebPart作为前几条数据列表WebPart类(以当前站点为数据源),ExtendDataSourceTopDataListWebPart类则以任意站点列表库为数据源显示前几条数据列表。目前该代码已满足项目需要,由于时间太紧,就凑合着用了。等项目结束,再整理下,把所有的列表库都考虑进去,包括图片库等。
结构
代码
namespace
DesignPattern.TemplateMethod
{
/**/
///
<summary>
///
数据列表WebPart基类
///
</summary>
public
class
BaseDataListWebPart : Microsoft.SharePoint.WebPartPages.WebPart
{
/**/
///
<summary>
///
获取当前数据列表
///
子方法扩展点
///
</summary>
public
virtual
SPList GetCurrentList()
{
//
.
}
/**/
///
<summary>
///
获取当前数据记录
///
模板方法
///
</summary>
protected
virtual
SPListItemCollection GetListItems()
{
SPList dataSourceList
=
GetCurrentList();
//
.
}
/**/
///
<summary>
///
获取普通列表和文档列表数据项查看地址
///
普通列表数据项查看地址从“列表库配置”列表读取,文档列表地址从文档列表地址读取
///
子方法扩展点
///
</summary>
///
<returns></returns>
protected
virtual
string
GetItemViewUrl(SPItem item)
{
//
.
}
}
}
namespace
DesignPattern.TemplateMethod
{
/**/
///
<summary>
///
前几条数据列表WebPart,以当前站点列表作为数据源
///
</summary>
public
class
TopDataListWebPart : BaseDataListWebPart
{
/**/
///
<summary>
///
获取当前数据列表
///
重写实现扩展
///
</summary>
public
override
SPList GetCurrentList()
{
//
..
}
/**/
///
<summary>
///
模板方法,通过子类重写GetListItems和GetItemViewUrl实现扩展
///
</summary>
protected
override
void
Render(HtmlTextWriter writer)
{
try
{
SPListItemCollection listItems
=
GetListItems();
if
(listItems.Count
>
0
)
{
foreach
(SPItem item
in
listItems)
{
string
itemViewUrl
=
GetItemViewUrl(item);
//
.
}
//
.
}
else
{
//
.
}
}
catch
(Exception e)
{
writer.Write(e.Message);
}
}
}
}
namespace
DesignPattern.TemplateMethod
{
/**/
///
<summary>
///
扩展TopDataListWebPart,实现可使用外部站点列表作为数据源
///
</summary>
public
class
ExtendDataSourceTopDataListWebPart : TopDataListWebPart
{
/**/
///
<summary>
///
获取当前数据列表
///
重写实现扩展
///
</summary>
public
override
SPList GetCurrentList()
{
//
.
}
/**/
///
<summary>
///
获取当前列表数据记录
///
重写实现扩展
///
</summary>
protected
override
SPListItemCollection GetListItems()
{
SPList dataSourceList
=
GetCurrentList();
//
.
}
}
}
要点
:
1、本模式是一种非常基础性的设计模式,在面向对象系统中有着大量的应用。它用最简洁的机制(虚函数的多态性)为很多应用程序框架提供了灵活的扩展点,是代码复用方面的基本实现结构。
2、除了可以灵活应对子步骤的变化外,“不要调用我,让我来调用你”的反向控制结构是本模式的典型应用。
3、在具体实现方面,被Template Method调用的虚方法可以具有实现,也可以没有任何实现(抽象方法,纯虚方法),但一般推荐将它们设置为protected方法。
欢迎访问我的淘宝
http://shop35795100.taobao.com
,专营衣服和鞋子。
posted on 2007-08-24 00:42
Charly
阅读(200)
评论(0)
编辑
收藏
所属分类:
架构设计
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
网站首页
新闻频道
社区
小组
博问
网摘
闪存
找找看
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
相关文章:
.NET初学者架构设计指南
.NET初学者架构设计指南(三)设计模式
.NET设计模式系列文章
.NET设计模式(2):单件模式(Singleton Pattern)
架构设计的第一个问题_AX
想转架构师,大家有什么建议不?
[推荐学习资料].NET初学者架构设计指南
门户网站架构设计
相关链接:
所属分类的其他文章:
设计模式学习笔记二十五——总结
设计模式学习笔记二十四——Visitor模式
设计模式学习笔记二十三——TemplateMethod模式
设计模式学习笔记二十二——Strategy模式
设计模式学习笔记二十一——State模式
设计模式学习笔记二十——Memento模式
设计模式学习笔记十九——Observer模式
设计模式学习笔记十八——Mediator模式
设计模式学习笔记十七——Iterator模式
设计模式学习笔记十六——Interpreter模式
最新IT新闻:
Mono 2.0 发布 Linux 上的 .NET 框架成熟了吗?
史上九大最强网络黑客
微软拟2010年推新版SQL 强化商业智能功能
GMail Labs 新功能 - 做数学题确认是否发出邮件
OpenOffice四处创造纪录 占有全球25%办公软件市场