我们知道中国是一个“制造大国”而非一个“创造大国”,为什么这么说呢?因为我们中国人的智慧是无与伦比的,我们对于“模仿”来说有着与生俱来的天赋,但是从“创新”的角度来看还是举步维艰。这次来谈谈国人的智慧-“模仿”。
说起“模仿”不得不提“模板”,因为有一个“模板”才能模仿出自己需要的东西。话说,当年的国产山寨机可是风靡一时,那么就以制造手机来理解一下“模板方法模式”。
代码结构图:
在这里Telephone是抽象类,其实也就是一个抽象模板,定义并实现了一个模板方法call()。这个模板方法是一个具体的方法,给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。
模板代码:
//手机
public abstract class Telephone
{
//能够拨打电话
public abstract void dial() ;
//实现通话功能
public abstract void communicate();
//挂断电话
public abstract void hangup();
//汇总一下,才叫做通话-骨架
public void call()
{
//先拨号
this.dial();
//接听后可以通话
this.communicate();
//通话完毕,挂断
this.hangup();
Console.WriteLine("");
}
}
Nokia代码:
//山寨计划-Nokia
class Nokia : Telephone
{
public override void dial()
{
//Nokia独特的声响
Console.WriteLine("铃铃铃,Nokia用户拨打中...");
}
public override void communicate()
{
Console.WriteLine("告诉你个好消息,我用上Nokia了");
}
public override void hangup()
{
Console.WriteLine("滴..滴.");
}
}
Iphone代码:
//山寨计划-Iphone
class Iphone : Telephone
{
public override void dial()
{
//Nokia独特的声响
Console.WriteLine("啦啦啦,Iphone拨打中...");
}
public override void communicate()
{
Console.WriteLine("小李呀,我买苹果了,羡慕吧...");
}
public override void hangup()
{
Console.WriteLine("咚..咚..");
}
}
客户端代码:
//客户端client
static void Main(string[] args)
{
//使用nokia
Telephone nokia1 = new Nokia();
nokia1.call();
//使用Iphone
Telephone iphone= new Iphone();
iphone.call();
Console.Read();
}
客户端中将变量声明改为父类,利用了多态性,实现了代码的复用。
启动后:
这样一款山寨的nokia和iphone就诞生了...
通过这个简单的小例子是否对模板方法模式有了初步的了解。那么模板模式有什么特点呢:
1.当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理;
2.模板方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势;
3.模板方法提供了一个很好的代码复用平台;
4.当不变和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现,我们通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。
后记:
随着社会的发展,安卓的出现,山寨机慢慢走入了一个困境,真实地反映了一个道理:模仿毕竟不如原创好。
民族在振兴,
国家在富强,
一代代先驱奔赴,
一次次创新展现,
试看未来世界,
中国模板走向全球...