按此在新窗口浏览图片
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 Responses

  1. 彩虹之旅 六月 10 2008 , 18:09 cn
    彩虹之旅
    图文解说和详细代码都有,很好的学习材料!先仔细看看...这些在开发里会比较常用!wink
    #1
  2. benben 六月 10 2008 , 20:21 cn
    benben
    程序代码并未在RSS里输出,检查下Rss~wink
    #2
  3. 幻想曲 六月 10 2008 , 20:49 cn
    幻想曲
    @benben:
    故意不输出的0
    #3
  4. 魔兽私服 六月 10 2008 , 22:51 cn
    魔兽私服
    字体好小啊,看都看不到
    #4
  5. benben 六月 11 2008 , 12:07 cn
    benben
    BlogEngine Search XSS 测试及修复wink
    #5
  6. 香水坏坏 六月 11 2008 , 12:16 cn
    香水坏坏
    Frame 承接了photo与各种不同类型边框的从属逻辑关系 嚯嚯 有意思挖。。。wink
    #6
  7. xulei928 六月 11 2008 , 18:30 cn
    xulei928
    哥们··做个连接···
    http://blog.3ak.cn 三趾博客
    个人博客··基本上都是原创··没有广告···
    我先给你做上···看到消息做不做回个话winkwinkwink
    #7
  8. opera 六月 11 2008 , 19:18 cn
    opera
    好东西
    #8
  9. 幻想曲 六月 11 2008 , 22:34 cn
    幻想曲
    @xulei928:
    谢谢
    暂不考虑链接
    #9
  10. 彩虹之旅 六月 12 2008 , 02:59 cn
    彩虹之旅
    看来还有很多站想和你做友情链接的,tongue
    #10

Write a comment:



(将显示你的Gravatar图标)  



[b][/b] - [i][/i] - [u][/u]- [quote][/quote]

:-/ ^_^ :d :o :kiss: :) :p :se: [yeah] :( :love: :han: :up: :cry: :zzz: o_o

评论提交有问题?