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

概念:


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


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

 


解释说明:


       1.原型模式和模板方法模式比较像,回想起来经常混在一起,所以区分一下。

       2.原型模式是先实例化出一个对象,然后不断复制这个对象,复制出来的对象可以继续修改自己这个复制体。

       3.模板方法模式是做一个模板的类,这个类把基础相同的部分都写了,每个子类继承这个类后在填写自己需要的内容。

       4.如果拿试卷来说,原型就是一份做好的试卷,咱们复制一份,再改改得数、名字……简单的修改就OK啦;而模板就是就是一份给每个人空着答案的一模一样的卷子,咱们自己写完之后那才算是一个成品。总之,一个是冲着对象去的,一个冲着类去的。


深复制浅复制:

       

       在用原型模式的时候就会涉及到一个深复制浅复制的问题。

       我们复制原来那个对象然后修改自己的这个副本,但一修改就出现问题了,因为我们复制出来的这个对象和原来那个对象是有公用的部分,这个公用的就是引用。引用本身没什么用,就跟一个超级链接的似的,但是我们用的可是超级链接的指向的那个东西。但是我们修改的又不是引用,引用一改连引用的对象都找不到了,我们一修改就是修改的引用的对象,那么一改就全改了。

       举个生活中的例子,我们实例化一个家庭对象,有(爸爸、妈妈、孩子),我们现在复制是可以的;但是非有人这么设计:(孩子他爸、妈妈、孩子),孩子他爸是一种关系啊,是一个指向性的东西,我们可以复制,但我们复制的就是一种关系,它不是实际的我们拥有的(一个货真价实的一个字段,一个值,就是个引用,一个链接)。从最开始的那个家庭对象指向了一个爸爸,后面所有的家庭对象都指向了这个爸爸,我们现在是没办法修改的。】

       这,就是所谓的浅复制,一改全改的浅复制。


       深复制的出现解决了这个问题。

       有引用就有引用,复制的时候把你引用的对象实例化出来一个放在我的里面就好了嘛,完美解决~

 

模板方法的特点:

       

       模板方法模式就是提供了一个很好的代码复用平台。

       说白了,就是程序员懒呗(其实这叫智慧),看到重复出现的代码,整个类吧,一继承就好了。但是好像又不完全一样,那不一样的地方就子类实现呗。

       和平时邮箱那个模板功能很像,把每次要写的内容写好存起来做成一个模板,每次直接用模板,然后再在上面填点新内容就好了。




总结:

       

       开始的一看这两个模式感觉都是在复用,然后再改改或者是不同的实现。其实还是有区别的,原型针对的还是对象,自己冲着自己复制出来的对象修修改改;而模板针对的是类,他们的层次不一样。

        临时想到,两个模式可以一起用。比如一个导师制定了一个框架,写作规范,题目……(这是个模板,是个类),学生每个人都做出不太一样的文章(这会还是个子类),然后有一个学生写的特别好,学术报纸就开始一次次的给他出版打印(这是不断的实例化),别的学校学生一看,说:我也得交这个作业,天助我也,那份报纸复制一下,改改名字,改改数据(这是原型模式),OK啦

        总之,这两种模式针对的层次不同,实现的功能都是复用。



 ——本学习总结参考书籍为《大话设计模式》作者:程杰

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值