小故事学设计模式之Decorate: (二)老婆的新衣服
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了小故事学设计模式之Decorate: (二)老婆的新衣服,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1558字,纯文字阅读大概需要3分钟。
内容图文
老婆有一件蓝色的裙子和一件粉色的裙子, 不管怎么穿,她还是原来的老婆。 但是在软件里就不一定了, 如果把老婆比作一个class的话, 有一种做法是会因为增加了两个新的Property而继承出两个子类:
"穿裙子的老婆, 穿粉色上衣的老婆".
你这样弄出两个子类也没什么不对, 问题是当MM的有上百件服装的时候,就会产生上百个子类,这个不好,将来万一父类一变化,下面上百个子类都要一个个地去修改,太乱了。
有一个更合理的方式来解决这个"老婆的装饰问题"。我们的要求是:
老婆不能因为穿上了不同的衣服而从本质上改变她这个人,(逻辑上说, 不要又来一个"白马非马")。
根据按上面的要求, 我们可以写出以下的代码:
using System; using System.Collections.Generic; using System.Text; public class Feifei { private string _myclothes; public string MyClothes { get{return _myclothes;} set{_myclothes = value;} } } publicclass BlueSkirt:Feifei { private Feifei _f; private StringBuilder _myclothes = new StringBuilder(); public BlueSkirt(Feifei f) { _f = f; } publicstring MyClothes { get { _myclothes.Append(_f.MyClothes); _myclothes.Append("and a piece of blue skirt"); return _myclothes.ToString(); } set{;} } } publicclass PinkSkirt:Feifei { private Feifei _f; private StringBuilder _myclothes = new StringBuilder(); public PinkSkirt(Feifei f) { _f = f; } publicstring MyClothes { get { _myclothes.Append(_f.MyClothes); _myclothes.Append("and a piece of pink skirt"); return _myclothes.ToString(); } set{;} } } publicclass MyClass { publicstaticvoid Main() { //老婆穿白色的鞋子出场 Feifei f1 = new Feifei(); f1.MyClothes = "I have white shoes,"; //换上蓝色的裙子 BlueSkirt f2 = new BlueSkirt(f1); Console.WriteLine(f2.MyClothes); //换上粉色的裙子 PinkSkirt f3 = new PinkSkirt(f1); Console.WriteLine(f3.MyClothes); Console.Read(); } }
好,我们来看一下结果。
以上就是Decorate模式的个人理解。
谢谢!
原文:http://www.cnblogs.com/yongyong/p/3721072.html
内容总结
以上是互联网集市为您收集整理的小故事学设计模式之Decorate: (二)老婆的新衣服全部内容,希望文章能够帮你解决小故事学设计模式之Decorate: (二)老婆的新衣服所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。