设计模式-装饰模式
【摘要】
前言: 装饰模式和人穿衣打扮是差不多的,人类穿衣打扮都需要一个更衣室或者是商场的试衣间。都是在隐秘的空间里打扮后之后再展示出自己的搭配,而今天这装饰模式和试衣服是一样的。都需要在后台进行然后在展示时出来结...
前言:
装饰模式和人穿衣打扮是差不多的,人类穿衣打扮都需要一个更衣室或者是商场的试衣间。都是在隐秘的空间里打扮后之后再展示出自己的搭配,而今天这装饰模式和试衣服是一样的。都需要在后台进行然后在展示时出来结果!
需求:
小菜有各种各样的服饰,鞋子和装饰品。小菜可以利用装饰模式,用自己已有的服饰对自己进行打扮。
类图:
解释:(装饰类Finey继承与人person 类。Finey子类都是一些具体的服饰!)
**实现:
Person(要装饰的对象,就是给谁打扮)
public class Person
{
public Person()
{
}
private string name;
/// <summary>
/// 人名
/// </summary>
/// <param name="name"></param>
public Person(string name)
{
this.name = name;
}//end Person
/// <summary>
/// 显示穿的衣服
/// </summary>
public virtual void Show()
{
Console.WriteLine("装扮的{0}", name);
}//end Show
}//end class Person
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
Finery(服饰的抽象类,定义打扮对象的初始化。)继承与Person类
/// <summary>
/// 服饰的抽象类
/// </summary>
public class Finery:Person
{
protected Person component;
/// <summary>
/// 打扮
/// </summary>
/// <param name="component">打扮的对象</param>
public void Decorate(Person component)
{
this.component = component;
}
/// <summary>
/// 显示具体衣服的抽象方法
/// </summary>
public override void Show()
{
//重写show里执行的具体内容
if (component!=null)
{
component.Show();
}//end if
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
具体的服饰:(Finery的子类)
垮裤
public class BigTrouser:Finery
{
public override void Show()
{
Console.WriteLine("垮裤");
base.Show();//调用具体的装饰对象
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
领带
public class public_WerTie:Finery
{
public override void Show()
{
Console.WriteLine("领带");
base.Show();//调用具体的装饰对象
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
运动鞋
public class Sneakers:Finery
{
public override void Show()
{
Console.WriteLine("运动鞋");
base.Show();//调用具体的装饰对象
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
T-血
/// <summary>
/// 服饰的子类,T-血
/// </summary>
public class Tshirts:Finery
{
/// <summary>
/// 重新父类方法
/// </summary>
public override void Show()
{
Console.WriteLine("大T-血");
base.Show();//调用具体的装饰对象
}//end Show
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
西装
public class WeraSuit:Finery
{
public override void Show()
{
Console.WriteLine("西装");
base.Show();//调用具体的装饰对象
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
皮鞋
public class WerLeatherShoes:Finery
{
public override void Show()
{
Console.WriteLine("皮鞋");
base.Show();//调用具体的装饰对象
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
破球鞋
public class Wersneakers:Finery
{
public override void Show()
{
Console.WriteLine("破球鞋");
base.Show();//调用具体的装饰对象
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
结果:
总结:
可以和第一版,第二版做下对比,很明显的可以看到第一版是违反开放封闭原则的不利于扩展。第二版虽然遵循了开放封闭性原则但是没有私密性 ,相当于在大街上当着所有人的面换衣服。第三版既做到了易扩展,还有私密性。 虽然最后展示的结果相同,但是后面的思路不同。
文章来源: kangshihang.blog.csdn.net,作者:康世行,版权归原作者所有,如需转载,请联系作者。
原文链接:kangshihang.blog.csdn.net/article/details/103001345
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)