举例
汪峰打造冠军团队。
起首团队类为空,经由汪峰不停的勤奋,为团队争夺学员,也为团队队员打造适宜的平台,让其发挥。
团队不停的变强,变完全,是由装潢者,依据差别的需求,给基类举行增改,一致末了博得你的赞许,满足你的需求。
完成装配器形式的类图:
战队组建代码
//汪峰战队 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(); }
装潢者形式的优瑕玷
看完装潢者形式的细致引见以后,我们继承剖析下它的优瑕玷。
长处:
装潢这形式和继承的目标都是扩大对象的功用,但装潢者形式比继承更天真
经由过程运用差别的细致装潢类以及这些类的排列组合,设想师能够创造出很多差别行动的组合
装潢者形式有很好地可扩大性
瑕玷:
装潢者形式会致使设想中涌现很多小对象,假如过分运用,会让顺序变的更庞杂。而且更多的对象会是的过失变得难题,特别是这些对象看上去都很像。
运用场景
下面让我们看看装潢者形式细致在哪些状况下运用,在以下状况下应该运用装潢者形式:
须要扩大一个类的功用或给一个类增添附加义务。
须要动态地给一个对象增添功用,这些功用能够再动态地打消。
须要增添由一些基本功用的排列组合而发生的异常大批的功用
.NET中装潢者形式的完成
在.NET 类库中也有装潢者形式的完成,该类就是System.IO.Stream,下面看看Stream类构造:
BufferedStream、CryptoStream和GZipStream实在就是两个细致装潢类,这里的装潢者形式省略了笼统装潢角色(Decorator)。下面演示下客户端怎样动态地为MemoryStream动态增添功用的。
MemoryStream memoryStream = new MemoryStream(new byte[] {95,96,97,98,99}); // 扩大缓冲的功用 BufferedStream buffStream = new BufferedStream(memoryStream); // 增加加密的功用 CryptoStream cryptoStream = new CryptoStream(memoryStream,new AesManaged().CreateEncryptor(),CryptoStreamMode.Write); // 增加紧缩功用 GZipStream gzipStream = new GZipStream(memoryStream, CompressionMode.Compress, true);
总结
到这里,装潢者形式的引见就完毕了,装潢者形式采纳对象组合而非继承的体式格局完成了再运行时动态地扩大对象功用的才能,而且能够依据须要扩大多个功用,避免了零丁运用继承带来的 ”天真性差“和”多子类衍生题目“。同时它很好地相符面向对象设想准绳中 ”优先运用对象组合而非继承“和”开放-关闭“准绳。
更多剖析C#设想形式编程中的装潢者形式相干文章请关注ki4网!