首页 > 代码库 > 设计模式-装饰器模式

设计模式-装饰器模式

前言

点击查看:设计模式系列

装饰器模式(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,数据结构。 

设计模式-装饰器模式