装饰器模式困惑【呼叫sp1234哥】

小宏 2017-06-29 02:33:50

//装饰器基类
public class CharactorDecoratorBase : CharactorBase
{
protected CharactorBase Charactor;
public CharactorDecoratorBase(CharactorBase charactor)
{
this.Charactor = charactor;
}


public override void Show()
{
this.Charactor.Show();
Console.WriteLine("给角色动态的换装备");
}
}
//装饰类
public class CharactorDecoratorCuirass : CharactorDecoratorBase
{
public CharactorDecoratorCuirass(CharactorBase charactor)
: base(charactor)
{
}

/// <summary>
///
/// </summary>
public override void Show()
{
base.Show();
Console.WriteLine("带上凌风胸甲");
}
}
//基础对象类
public class Mage : CharactorBase
{

public override void Show()
{
Console.WriteLine("这里是法师 Oye");
}
}
//实现程序
CharactorBase mage = new Mage();//造一个法师
mage = new CharactorDecoratorHead(mage);
mage = new CharactorDecoratorShoulder(mage); //另一个装饰类未贴代码
mage.Show();

困惑
CharactorDecoratorShoulder类执行show方法的时候
base.Show();应该是他父类的show方法,怎么链到CharactorDecoratorHead类里面去了?
表述的不是很清楚,就是对实现原理没理解,请大神帮忙
...全文
301 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
真相重于对错 2017-06-30
  • 打赏
  • 举报
回复
看懂百度上面关于装饰者模式的类图,其实就应该明白了
绿领巾童鞋 2017-06-30
  • 打赏
  • 举报
回复
一个房子 是什么风格不重要,重要的是,你确实需要这样的风格。。。
真相重于对错 2017-06-30
  • 打赏
  • 举报
回复
http://baike.baidu.com/link?url=OGuC3E4ud0tKUb01ebNr3313kEeLKeCZFTC8yATsDA0RqjfAA5CL5Uy-07wYmz17LsSwi52a5L8KUldGcyu12ivdjrk6FSt-E09NNpqkOaY6mkGpMcVVJBFX2ADNzujV
正怒月神 2017-06-30
  • 打赏
  • 举报
回复
base.Show();应该是他父类的show方法,怎么链到CharactorDecoratorHead类里面去了? 我们先看CharactorDecoratorShoulder(mage); 他肯定实现了show方法对不对? 然后在看
public CharactorDecoratorBase(CharactorBase charactor)
        {
            this.Charactor = charactor;
        } 
 
 
        public override void Show()
        {
            this.Charactor.Show();
            Console.WriteLine("给角色动态的换装备");
        }
由于调用了构造函数 public CharactorDecoratorBase(CharactorBase charactor) 所以最后的子类对象是你传递过去的。 接着 this.Charactor.Show();这个时候的Charactor其实是构造函数里,你传递过去的,因此base.show()的实现其实就是你传递过去的Charactor的show方法
xdashewan 2017-06-30
  • 打赏
  • 举报
回复
看了一天还没理解?你不如把几个方法打上日志,一看全明白
小宏 2017-06-30
  • 打赏
  • 举报
回复
顶个~沉下去了
闭包客 2017-06-30
  • 打赏
  • 举报
回复
其实 sp1234 是个很害羞的人,你这么直接不行的,楼主下次不要这样了。
秋的红果实 2017-06-29
  • 打赏
  • 举报
回复
CharactorDecoratorHead,CharactorDecoratorShoulder在对象模型图里,处在哪个层次?没说清 有一点,mage最终还是CharactorBase类型的
小宏 2017-06-29
  • 打赏
  • 举报
回复
引用 2 楼 closurer 的回复:
设计模式就是这样,绕来绕去……
还没绕明白,还在晕
闭包客 2017-06-29
  • 打赏
  • 举报
回复
设计模式就是这样,绕来绕去……
xdashewan 2017-06-29
  • 打赏
  • 举报
回复
就是调用的父类Console.WriteLine("给角色动态的换装备");,但在这之前会调用this.Charactor.Show();来获取角色已有的功能Charactor是什么,就是你在构造函数this.Charactor = charactor;传入的法师对象自己new CharactorDecoratorHead(mage);

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧