设计模式利剑4-模板方法模式

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

优    点:

             1、封装不可变部分、扩展可变部分

             2、提取公共部分代码,便于维护

             3、行为由父类控制,子类实现

缺    点:按照正常的设计,抽象类负责申明最抽象,最一般的事务属性和方法,实现类完成具体的事务属性和方法。但是模板方法却跌倒了,抽象类定义了部分抽象方法,由子类实现,子类执行的结果影响了父类的结果,也就是子类对父类产生了影响

使用场景:

            1、多个子类有公有的方法,并且逻辑基本相同时

            2、重要、复杂的算法,可以把核心算法设计为模板犯法,周边的相关细节功能则由各个子类实现

            3、重构时,模板方法模式是一个经常使用的模式,把相同的代码抽取到父类中,然后通过钩子函数约束行为

应用案例:

           例如制造一个车模型,车子可以启动、停止、喇叭、启动等操作,而这些操作都是可以在子类中随意配置的,设计出来的类图如下:

1         那么当子类实现抽象类的时候,可以随意让先按喇叭,然后再启动,也可以让车子启动后再按喇叭,其中有一个重要的功能那就是喇叭操作是否可以不要呢?如果两个车子创建的流程是一模一样,但是有的车子并不需要喇叭,这个时候,可以将相同的代码抽取到父类中,然后通过钩子函数,来约束父类的行为,设计好的UMl图如下:

1       模板方法可以说是提供了灵活的方式,让子类变得更加轻松和更加自由,轻松之处在于很多复杂核心的操作可以放在父类中实现,而自由之处是自己可以随便组装来完成自己的任务,如谷歌的工作环境非常之好,员工可以带宠物来公司,可以上班时间按摩,可以锻炼身体,可以游泳,可以自由工作,另外还有20%的自由时间可以用来做工作分配以外的事情。多么美好的公司,是所有人所向往的,我们用UML图来实现这一美好梦想:

1         估计看完了上面的UML图以后,就明白了模板方式有多么大的吸引力,完全一种自由的方式来完成自己在谷歌一天的生活,真是完美。其实生活中的方式都和这个模板差不多,吃饭,刷牙,洗脸,有些人喜欢先洗脸再刷牙然后再吃饭,还有些人喜欢先吃饭再刷牙,然后再洗脸,正是由于这个模板方法模式,让世界变的更多样性,让世界变的更加的美好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值