最近在看设计模式,刚从工厂模式中学了点技术,这不又要学
点策略。
“初生牛犊不怕虎”,刚学习了点技术,就不知天高地厚了,
乍一看策略,这不也没什么嘛!跟我从工厂里面学习到的技术也
差不多嘛,其实不然。
敲了几遍代码,一直在想怎么用一种更加简单易懂的方式来形
容这种模式呢?只有这样才能加深对这种模式的理解。下面就拿
提高班“开刀”吧!
大家众所周知,在提高班要学习很多门课程,都是米老师一个
人讲的,如果米老师不懂的“策略”的话,怎么能够对付我们这
群调皮的学生呢! 看下面这个例子。
//多门课程的抽象
abstract class classes
{
public abstract void teaching();
}
class Match:classes
{
public override void teaching()
{
Console.WriteLine("教语文");
}
}
class English : classes
{
public override void teaching()
{
Console.WriteLine("教英语");
}
}
class 米老师
{
classes teachingclass;
//告诉要教授的内容
public 米老师(classes teachingclass)
{
this.teachingclass = teachingclass;
}
//自己的方法,调用其算法的方法
public ovid teach()
{
teachingclass.teaching();
}
}
class student
{
//学生端
static void Main(string [] args)
{
米老师 师哥;
师哥=new 米老师(new English );
师哥.teach();
米老师 师姐;
师姐=new 米老师(new Match );
师姐.teach();
}
}
大家或许从中发现什么了,米老师在这里充当的角色就相当
于那些课程的引用,或者说是课程的接口。
那些课程封装到一块,运用继承的方式来继续扩充课程的广
度,比如我可以在添加语文,地理等,而米老师的角色就相当于
这些课堂的一个另外的角色,就连教授方法也是调用别人的。那
么当学生在有需求,想学习知识的时候,只需要告诉米老师,然
后米老师通过实例化,然后派来师哥师姐来帮助我们。这就是米
老师的教学方法,不仅对增长我们的见识,同时也让师哥师姐们
得到了历练,这就是米老师的“策略”。
再者感觉策略模式还有点相似一个接口,上面的课程经过封装
后,通过老师这个接口,当学生有需求的时候,直接通过这个接
口来调用即可。
另外策略模式又让我想起了C#中的委托,课程这个类委托给了
老师,讲课的时候,在通过这个委托调用即可。
两种模式的对比
共性:
两者都是把所有的东西封装打包,然后引入第三方,那
么这样的好处就是起到了分离的功能,不影响对方的扩展,增加
了灵活性。
不同点:
简单工厂模式是根据业务的扩展生成了一个符合需求的
对象,而策略模式相当于业务的副本,通过业务延伸出来的这个
副本的接口就可以了解到内部。