设计模式-装饰器模式

前言

点击查看:设计模式系列

装饰器模式(Decorator)

定义:不通过派生类增改类属性动作,而是通过模式设计动态的达到这种效果,而且比继承更方便灵活减少程序的复杂性。

举例:

汪峰打造冠军团队。

首先团队类为空,经过汪峰不断的努力,为团队争取学员,也为团队队员打造合适的平台,让其发挥。

团队不断的变强,变完整,是由装饰者,根据不同的需求,给基类进行增改,一致最后赢得你的赞同,满足你的需求。

实现装配器模式的类图:

战队组建代码

 //汪峰战队
    abstract class WangFengTeam
    {
        //执行策划命令
        abstract public void Acrion();
    }

    //学员
    class Student : WangFengTeam
    {
        // Methods
        override public void Acrion()
        {
            Console.WriteLine("汪峰团队学员情况:");
        }
    }

    // 战队总策划
    abstract class Direct : WangFengTeam
    {
        //汪峰战队
        protected WangFengTeam team;

        // 策划活动
        public void SetComponent(WangFengTeam team)
        {
            this.team = team;
        }
        //执行策划
        override public void Acrion()
        {
            if (team != null)
            {
                team.Acrion();
            }
        }
    }

    //男孩唱狂放型的,构建一个组合。
    class BoyTeam : Direct
    {
        // 组合名称
        public string teamName= "锋利的Jquery";

        //具体策划
        override public void Acrion()
        {
            base.Acrion();
            Console.WriteLine("我是汪峰团队,狂放型的。");
        }
    }

    //女孩唱婉约型的,来个模特表演
    class GrilTeam : Direct
    {
        //具体策划
        override public void Acrion()
        {
            base.Acrion();           

            Console.WriteLine("我是汪峰团队,婉约型的。");

            //模特表演
            show();
        }

        public void show()
        {
            Console.WriteLine("婉约型,走秀");
        }
    }

客户端代码:

 public static void Main()
        {
            Student team = new Student();
            BoyTeam boy = new BoyTeam();
            GrilTeam girl = new GrilTeam();

            //团队男孩装饰
            boy.SetComponent(team);
            //团队女孩装饰
            girl.SetComponent(boy);
            girl.Acrion();
            Console.Read();
        }

装饰器模式理解

动态扩展类功能属性,而无需通过继承层次结构实现,这改变啦一些继承类的不足之处,也更方便灵活给类添加职责方式。但是装饰器模式在使用过程中,也会给维护人员带来烦恼,因为他会产生许多小的对象,让你头痛欲裂,所以,代码注释,还有代码条理一定要整理清楚,以防给后期维护人员带来,看着蛋疼的代码。

希望你能运行下代码,根据运行次序去理解每一个设计模式,多思考,多探讨

欢迎加入博客左上方群,交流探讨,设计模式,数据库,c#.net,数据结构。 

posted @ 2014-08-28 18:08  张龙豪  阅读(6896)  评论(4编辑  收藏  举报