上一篇: 下一篇:

装饰者模式

2008年06月10日  |  4:31 下午分类:Develop  |  标签:  |  


Component
抽象组件,在以下例子中为Photo类
ConcreteComponent
具体组件,在以下例子中为MyPhoto类,继承自Photo类

Decorator
装饰者抽象组件,在内部维护一个Photo的实例
装饰者组件也继承自Photo类,以下例子中为PhotoFrame抽象类
ConcreteDecorator
具体装饰者,如矩形相框、椭圆相框等。
在重写Photo类相关方法的同时,会附加其它的方法


class Program
{
static void Main(string[] args)
{
//先创建一个影集
Photo photo = new MyPhoto("黄山之行影集");
//用一个矩形相框装饰它
photo = new RectangleFrame(photo);
//再用一个椭圆相框装饰它
photo = new EllipseFrame(photo);
photo.GetDescription();
}
}

/// <summary>
/// 相片基类
/// </summary>
public abstract class Photo
{
public Photo() { }
protected string _description = "未命名";
public Photo(string description)
{
_description = description;
}
/// <summary>
/// 返回相片的描述
/// </summary>
public abstract void GetDescription();
}

/// <summary>
/// 具体相片
/// </summary>
public class MyPhoto : Photo
{
public MyPhoto(string description)
: base(description)
{

}

public override void GetDescription()
{
Console.WriteLine(_description);
}
}

/// <summary>
/// 装饰类,相框
/// </summary>
public abstract class PhotoFrame : Photo
{
private Photo _photo = null;
public PhotoFrame(Photo p)
{
_photo = p;
}
public override void GetDescription()
{
if (_photo != null)
_photo.GetDescription();
}
}

/// <summary>
/// 具体的相框,矩形相框
/// </summary>
public class RectangleFrame : PhotoFrame
{
public RectangleFrame(Photo p) : base(p)
{

}
public override void GetDescription()
{
base.GetDescription();
Console.WriteLine("--已加上矩形相框");
}
}

/// <summary>
/// 具体的相框,椭圆相框
/// </summary>
public class EllipseFrame : PhotoFrame
{
public EllipseFrame(Photo p)
: base(p)
{
}
public override void GetDescription()
{
base.GetDescription();
Console.WriteLine("--加上漂亮的椭圆边框");
}
}

执行结果:


所有代码下载:
Decorator.rar (794.00 bytes)

转载时务必以超链接形式标明文章原始出处和作者信息。

10 位领导已批示 关于 “装饰者模式”

  1. 彩虹之旅 发表于: 六月 10th, 2008 6:09 下午

    图文解说和详细代码都有,很好的学习材料!先仔细看看…这些在开发里会比较常用!^_^

  2. benben 发表于: 六月 10th, 2008 8:21 下午

    程序代码并未在RSS里输出,检查下Rss~^_^

  3. 幻想曲 发表于: 六月 10th, 2008 8:49 下午

    @benben:
    故意不输出的:)

  4. 魔兽私服 发表于: 六月 10th, 2008 10:51 下午

    字体好小啊,看都看不到

  5. benben 发表于: 六月 11th, 2008 12:07 下午

    BlogEngine Search XSS 测试及修复^_^

  6. 香水坏坏 发表于: 六月 11th, 2008 12:16 下午

    Frame 承接了photo与各种不同类型边框的从属逻辑关系 嚯嚯 有意思挖。。。^_^

  7. xulei928 发表于: 六月 11th, 2008 6:30 下午

    哥们··做个连接···
    http://blog.3ak.cn 三趾博客
    个人博客··基本上都是原创··没有广告···
    我先给你做上···看到消息做不做回个话^_^^_^^_^

  8. opera 发表于: 六月 11th, 2008 7:18 下午

    好东西

  9. 幻想曲 发表于: 六月 11th, 2008 10:34 下午

    @xulei928:
    谢谢
    暂不考虑链接

  10. 彩虹之旅 发表于: 六月 12th, 2008 2:59 上午

    看来还有很多站想和你做友情链接的,:p


发表您的评论

1410168172122013183195114157619