日期:2014-05-18  浏览次数:20706 次

关于Decorator设计模式的Demo,欢迎来喷和来分享下你实用的Decorator模式
我最近开始了解设计模式,其他的模式还好,但是现在到Decorator模式,有点蒙,虽然让我很惊叹,但感觉实用上我本人没有碰到过什么好例子,也没有想到用该模式解决怎么样的问题比较OK。希望大家有用过的来分享下没用过的来喷下,探讨探讨。
以下是我自己写的一个简单的Demo,不足之处请大家指示。。。
C# code
class Program
    {
        static void Main(string[] args)
        {
            IPager pager = PagerFactory.GetPager();
            pager.Show();
        }
    }

    /// <summary>
    /// 工厂类
    /// </summary>
    public class PagerFactory
    {
        public static IPager GetPager()
        {
            IPager pager;
            pager = new MainPager();
            pager = new FootPager1(pager);
            pager = new HeadPager2(pager);
            pager = new HeadPager1(pager);

            return pager;
        }
    }

    /// <summary>
    /// 页面模块接口
    /// </summary>
    public interface IPager
    {
        void Show();
    }

    /// <summary>
    /// 页面主要内容
    /// </summary>
    public class MainPager : IPager 
    {
        public void Show()
        {
            Console.WriteLine("主页面内容");
        }
    }

    /// <summary>
    /// 页面模块Decorator基类
    /// </summary>
    public class PageDecorator : IPager
    {
        public IPager Pager;
        public PageDecorator(IPager pager)
        {
            this.Pager = pager;
        }        

        public void ShowPager()
        {
            if (this.Pager != null)
            {
                this.Pager.Show();
            }
        }

        public virtual void Show(){ }
    }

    public class HeadPager1 : PageDecorator
    {
        public HeadPager1(IPager pager) : base(pager) { }
        public override void Show()
        {
            Console.WriteLine("头部一内容");
            base.ShowPager();
        }
    }

    public class HeadPager2 : PageDecorator
    {
        public HeadPager2(IPager pager) : base(pager) { }
        public override void Show()
        {
            Console.WriteLine("头部二内容");
            base.ShowPager();
        }
    }

    public class FootPager1 : PageDecorator
    {
        public FootPager1(IPager pager) : base(pager) { }
        public override void Show()
        {
            base.ShowPager();
            Console.WriteLine("尾部一内容");
        }
    }


------解决方案--------------------
C#不需要装饰模式

参考:http://topic.csdn.net/u/20111213/15/6a11a24e-e3e5-480f-95c9-9a877bb3b688.html