【设计模式】——原型模式VS模板方法模式

    不知道何种原因总是把原型模式和模板方法模式搞混,着实很苦恼啊!不知道大家是否有同样的困扰,有的话治疗,没有的话预防啊。故该文章进行详细对比学习!

原型模式

    所谓的原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

    解释:从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。应该注意概念中的拷贝两个字,这是原型模式的精髓所在。原型模式实行的关键就是clone函数。

    例子:简历复制,之前没有复印机的时候,完全手写,需要写很多份重复的简历,如果简历有错,改起来也是相当费劲了。后来有了打印机,在出现简历错误,只需要改一份,之后再复印的内容就是正确的了。无论是手抄还是复印,在执行这些方法的时候肯定之前有一份原始的初稿,故这个可以理解为原型模式。

       

   重点提示:想要改变通过原型模式继承实现具体原型类中的内容必须改变抽象类中的内容才可以。

模板方法模式

    模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。

    解释:在做程序的过程中,会用到继承,就要继承做的更有价值,成为子类的模板,所有重复的代码都应该上升到父类中,而不是让每个子类都去重复。当我们要完成某一个细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,用到模板方法模式,将不同的地方转移到子类中,在需要的时候进行重新定义。

    例子:同样上面的简历问题,大部分人不可能一生就一个固定的工作,所以在写简历的过程注定有一栏是工作经历。可是每一次工作经历大概相同,无非就是入职年份,任期工作内容,离职时间。但是具体的内容又不一样,随着不断的求职,这个随之改变,不能每一次求职都重写一份原型吧。这个时候可以用到模板方法模式。把工作经历中大概流程放到抽象类中,把具体的内容填写到子类中。这样在抽象类中定义一个操作算法的骨架,将具体的步骤延迟到子类中。

   

【总结】

     个人感觉两者最大的区别就是原型模式改动的时必须改动根部才可以;而模板方法模式,需要改变子类中的就行。当然两者的作用范围不一样啊。模板方法模式更偏向于操作算法结构,而原型模式则适用于整体范围。在学习的时候感觉两者特别像,这过程中一直混淆者,真正的踏下心分析的时候真的,这都不是事!所以面对不同的问题,一种方法不会改变,踏实研究做!


    本人菜鸟一只,个人看法,如有不正确之处,还有希望大神们不惜赐教,定当不胜感激!

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 26
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mandy_i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值