逗B少年搞程序04 装饰模式——又是一波非常规性总结

    上一篇的dota技能版策略模式不知道有几个人看的懂,反正是看的人恶心,我是写的挺爽。

    设计模式看了有一周了,培养计划上写着要看两遍,一遍接受并理解,一遍理解并思考。。。像我这么智商捉急的少年,这两遍书又不知道要看到什么时候了。

    不管要看到什么时候,反正是跑不了的,还是静下心来慢慢体会吧。

    说道接受知识,米老师今天又给我们上了一课,看到新的知识不要害怕,用学过的熟悉的知识中联系新的知识,找相同点和不同点,这样就很容易接受了。我就说我每次用dota强行联系新知识没问题的吧~

    这次本来要写一篇dota装备篇的装饰模式,但是上午听了米老师的课,觉得用学习也一样可以写出装饰模式的代码,于是又用了一些时间写代码,哎,本来今天已经到了月底,大伙都无比的繁忙,咳咳。。。都懂得,但是遇到想写的东西就像吃了炫迈一样,根本停不下来啊。

    写都写了,那就索性发个博客,本来计划着大酒神的视频一更新,就发一篇博客的,但是酒神貌似最近已经丧心病狂了,刚隔了两天就发了个新的视频,对于这种情况我只能舍命陪君子了,管他四月博客发够了没有,管他是不是晚两天五月再发,我就是要写!

    好吧,那就开始这次的设计模式解说。

    自从三合班回到机房之后,一直在思考,今天的课怎么总结呢?一直以来学习的时候我都是联系着学的,虽然联系的内容有待商榷吧。今天最大的收获就是,要站在自己的肩膀上,我们已经慢慢成长成为小巨人了,学习的时候反而把最初的方法忘掉了,我们已经学过很多知识了,新的知识也就可以按照米老师说的进行联系了。

    在旧知识的基础上学新知识。

    在旧的功能上添加新的功能。

    果然是怎么想怎么有啊,那就搞起了。

class person        //定义一个“人”类,学习总是要人来学吧
{
    private string name;    //只是为了打印名字

    public person() {}
    public person(string name)      //实例化时更改name
    {
        this.name = name;
    }

    public virtual void show()      //显示
    {
        Console.WriteLine("精通的{0}", name);
    }
}

class Knowlodge : person        //知识类,相当于装饰的抽象类
{
    protected person component;
    public void study(person component)   //study方法:在之前的知识上学习新的知识
                                          //参数类型是person,所以才能一层一层装饰起来
    {
        this.component = component;
    }

    public override void show() //重写show方法主要是判断是否为空
    {
        if (component != null)
        {
            component.show();
        }
    }
}

class Excel : Knowlodge     //Excel知识
{
    public override void show()     //在基类show方法前面加“Excel”
    {
        Console.Write("Excel ");
        base.show();
    }
}

class VB : Knowlodge        //VB知识
{
    public override void show()     //在基类show方法前面加“VB”
    {
        Console.Write("VB ");
        base.show();
    }
}

class SQL : Knowlodge       //SQL知识
{
    public override void show()     //在基类show方法前面加“SQL Server”
    {
        Console.Write("SQL Server ");
        base.show();
    }
}

   后面的事情就简单了,一步一步的学下去吧。

class Program
    {
        static void Main(string[] args)
        {
            person lina = new person("Lina");   //一个叫Lina的少年

            Console.WriteLine("简介:");

            Excel ex = new Excel();
            VB vb = new VB();
            SQL sql = new SQL();

            ex.study(lina);                    //学Excel知识
            vb.study(ex);                      //学VB知识
            sql.study(vb);                     //学SQL知识

            sql.show();                        //显摆一下~
        }
    }

   这样就差不多了,

   装饰模式我的理解大概就是在原有的功能基础上添加新的功能,但是这个功能不应该太复杂,一般是为了解决某些特殊情况什么的。这样类的核心功能部分和装饰功能部分就分开了,符合了单一职责的原则。

   ok,这一期就到这了,没有意外的情况下应该是下个月再写了,大家评的开心,评的愉快~

以上




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值