上一篇的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,这一期就到这了,没有意外的情况下应该是下个月再写了,大家评的开心,评的愉快~
以上