记忆潜处
With great power comes great responsibility
博客园
首页
新随笔
联系
订阅
管理
随笔-42 评论-125 文章-0 trackbacks-4
Core Design Patterns(1) Decorator 装饰模式
VS 2008
当我们需要给一个已有的对象动态的附加状态或行为时,使用装饰模式。
装饰模式的要点是:装饰类实现了最初的被装饰类,并且包含了被装饰类的一个实例
1. 模式静态类图
2. 应用
从一只可以写的Pen开始
把它装饰成有颜色的笔、粗线的笔,甚至可以是有颜色且粗线的笔
IWritable
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
namespace
DesignPattern.Decorator.BLL
{
interface
IWritable
{
void
Write();
}
}
Pen
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
namespace
DesignPattern.Decorator.BLL
{
class
Pen : IWritable
{
IWritable Members
#region
IWritable Members
public
void
Write()
{
Console.WriteLine(
"
I can write!
"
);
}
#endregion
}
}
ColoredPen
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
namespace
DesignPattern.Decorator.BLL
{
class
ColoredPen : IWritable
{
IWritable component
=
null
;
string
color
=
string
.Empty;
public
ColoredPen(IWritable component,
string
color)
{
this
.component
=
component;
this
.color
=
color;
}
IWritable Members
#region
IWritable Members
public
void
Write()
{
this
.component.Write();
Console.WriteLine(
"
my color is
"
+
color);
}
#endregion
public
void
SetColor(
string
color)
{
this
.color
=
color;
}
}
}
BoldPen
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
namespace
DesignPattern.Decorator.BLL
{
class
BoldPen : IWritable
{
IWritable component
=
null
;
int
borderWidth
=
0
;
public
BoldPen(IWritable component,
int
borderWidth)
{
this
.component
=
component;
this
.borderWidth
=
borderWidth;
}
IWritable Members
#region
IWritable Members
public
void
Write()
{
this
.component.Write();
Console.WriteLine(
"
my border width is
"
+
this
.borderWidth.ToString());
}
#endregion
public
void
SetBorderWidth(
int
borderWidth)
{
this
.borderWidth
=
borderWidth;
}
}
}
Client
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
DesignPattern.Decorator.BLL;
namespace
DesignPattern.Decorator
{
class
Program
{
static
void
Main(
string
[] args)
{
IWritable p
=
new
Pen();
p.Write();
Console.WriteLine();
ColoredPen coloredPen
=
new
ColoredPen(p,
"
red
"
);
coloredPen.Write();
Console.WriteLine();
BoldPen boldPen
=
new
BoldPen(p,
2
);
boldPen.Write();
Console.WriteLine();
BoldPen coloredAndBoldPen
=
new
BoldPen(coloredPen,
4
);
coloredAndBoldPen.Write();
}
}
}
posted on 2008-02-24 22:05
Tristan(GuoZhijian)
阅读(221)
评论(1)
编辑
收藏
所属分类:
Design Pattern
评论:
#1楼
2008-05-13 15:35 |
吉日嘎拉 [未注册用户]
在学习你的这些,挺不错的,想从头,学到尾。
回复
引用
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
博客园首页
新闻频道
社区
小组
博问
网摘
闪存
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2008-02-25 22:03 编辑过
成果网帮您增加网站收入
相关文章:
.NET设计模式系列文章
.NET设计模式(10):装饰模式(Decorator Pattern)
Decorator装饰模式
装饰模式(Decorator)
装饰(Decorator)模式
.NET设计模式(2):单件模式(Singleton Pattern)
相关链接:
所属分类的其他文章:
Core Design Patterns(16) Chain of Responsibility 职责链模式
Core Design Patterns(15) Template Method 模版方法模式
Core Design Patterns(14) State 状态模式
Core Design Patterns(13) Strategy 策略模式
Core Design Patterns(12) Builder 建造者模式
Core Design Patterns(11) Abstract Factory 抽象工厂模式
Core Design Patterns(10) Singleton 单例模式
Core Design Patterns(9) Factory Method 工厂方法模式
Core Design Patterns(8) Prototype 原型模式
Core Design Patterns(7) Facade 外观模式
最新IT新闻:
千亿美元市值榜:微软居首移动第二 诺基亚退榜
Google申请“海上数据中心”专利 可能付诸行动
用Google Earth实时追踪人造卫星
传IBM将以35亿美元至40亿美元收购北电
Google卫星已经开始工作
Tristan obtained a master's degree of mathematics at DongHua university in Mar. 2006. Now he works at Cognizant co. as a software engineer. He is currently working with c# mostly in web application development.He has a good understanding of CLR, asp.net, javascript, ajax, xml, xslt, OOP, design pattern, etc.
You can contact him
by email: promiss#live.cn
<
2008年2月
>
日
一
二
三
四
五
六
27
28
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
1
2
3
4
5
6
7
8
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
(3)
给我留言
查看留言
我参加的小组
博客园上海俱乐部
我参与的团队
上海.NET俱乐部(0/2237)
随笔分类
(42)
Asp.Net(5)
Asp.Net Ajax(14)
C#(3)
Design Pattern(16)
SqlServer2005(2)
Windows Forms App(2)
随笔档案
(42)
2008年4月 (1)
2008年3月 (12)
2008年2月 (18)
2008年1月 (7)
2007年12月 (3)
2007年11月 (1)
.Net Professionals
Ian Griffiths' Weblog
积分与排名
积分 - 34693
排名 - 1200
最新随笔
1. Core Design Patterns(16) Chain of Responsibility 职责链模式
2. Core Design Patterns(15) Template Method 模版方法模式
3. Core Design Patterns(14) State 状态模式
4. Core Design Patterns(13) Strategy 策略模式
5. Core Design Patterns(12) Builder 建造者模式
6. Core Design Patterns(11) Abstract Factory 抽象工厂模式
7. Core Design Patterns(10) Singleton 单例模式
8. Core Design Patterns(9) Factory Method 工厂方法模式
9. Core Design Patterns(8) Prototype 原型模式
10. Core Design Patterns(7) Facade 外观模式
11. Core Design Patterns(6) Adapter 适配器模式
12. Core Design Patterns(5) Flyweight 享元模式
13. Core Design Patterns(4) Composite 组合模式
14. Core Design Patterns(3) Bridge 桥接模式
15. Core Design Patterns(2) Proxy 代理模式
16. Core Design Patterns(1) Decorator 装饰模式
17. 老调重弹:插件式框架开发的一个简单应用
18. Behavior模型应用:可拖动的div容器
19. Microsoft Asp.Net Ajax框架入门(13) PageRequestManager
20. Microsoft Asp.Net Ajax框架入门(12) 了解异步通信层
最新评论
1. re: Behavior模型应用:可拖动的div容器
哥们!加油,这几篇关于ASP.NET AJAX 的我都看了,不错。
--GoodGoodStudy
2. re: Core Design Patterns(9) Factory Method 工厂方法模式
我的QQ号379858431
想加你~~
想弄清楚最新的抽象工厂是怎么弄的
--维维糖
3. re: 浅述WinForm多线程编程与Control.Invoke的应用
控件使用Invoke后,怎么才能立刻让其释放资源?
我做了一个实时画图的控件,使用invoke后,资源不能释放,总是提示 picturebox正在其他地方使用,怎么解决?谢了
--孙艺珍
4. re: Microsoft Asp.Net Ajax框架入门(7) 名称空间、类、继承、接口
MARK.
--傲然林
5. re: 我的WinForm App自动更新(Live Update)架构
不错滴说,之前好像我们的实现方式也是借助于MS的ClinicOnce.
--傲然林
阅读排行榜
1. 浅述WinForm多线程编程与Control.Invoke的应用(3367)
2. 我的WinForm App自动更新(Live Update)架构(2321)
3. Core Design Patterns(14) State 状态模式(2241)
4. 通过继承ConfigurationSection,在web.config中增加自定义配置(1841)
5. 老调重弹:插件式框架开发的一个简单应用(1763)
评论排行榜
1. 我的WinForm App自动更新(Live Update)架构(36)
2. 浅述WinForm多线程编程与Control.Invoke的应用(23)
3. Microsoft Asp.Net Ajax框架入门(7) 名称空间、类、继承、接口(10)
4. 老调重弹:插件式框架开发的一个简单应用(8)
5. Core Design Patterns(14) State 状态模式(8)