首页 > 其他分享 >设计模式利剑4-模板方法模式

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

时间:2022-11-09 17:38:34浏览次数:44  
标签:End Sub 利剑 子类 Overrides Console 设计模式 Public 模板


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

优    点:

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

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

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

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

使用场景:

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

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

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

应用案例:

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

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

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

设计模式利剑4-模板方法模式_算法_02

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

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

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

Public MustInherit Class HumanModel

Public MustOverride Sub start()
Public MustOverride Sub stop1()
Public MustOverride Sub alarm()
Public MustOverride Sub engineBoom()
Public Sub run()
'定义运行的顺序
start()
engineBoom()
alarm()
stop1()
End Sub
End Class ' HumanModel
Public Class HummerH1
Inherits HumanModel
Public Overrides Sub start()
Console.WriteLine("悍马H1启动")
End Sub
Public Overrides Sub stop1()
Console.WriteLine("悍马H1停止")
End Sub
Public Overrides Sub alarm()
Console.WriteLine("悍马H1鸣喇叭")
End Sub
Public Overrides Sub engineBoom()
Console.WriteLine("悍马H1引擎声音")
End Sub
End Class ' HummerH1
Public Class HummerH2
Inherits HumanModel
Public Overrides Sub start()
Console.WriteLine("悍马H2启动")
End Sub
Public Overrides Sub stop1()
Console.WriteLine("悍马H2停止")
End Sub
Public Overrides Sub alarm()
Console.WriteLine("悍马H2鸣喇叭")
End Sub
Public Overrides Sub engineBoom()
Console.WriteLine("悍马H2引擎声音")
End Sub
End Class ' HummerH2
Sub Main()
Dim h1 As HummerH1 = New HummerH1
h1.run()
Dim h2 As HummerH2 = New HummerH2
h2.run()
Console.ReadLine()
End Sub

标签:End,Sub,利剑,子类,Overrides,Console,设计模式,Public,模板
From: https://blog.51cto.com/u_15870687/5837381

相关文章

  • 设计模式利剑5-建造者模式
    定   义:将一个复杂对象的构建于它的表示分离,使得同样的构建过程可以创建不同的表示优   点:            1、封装性            2、建造者......
  • 设计模式利剑15-组合模式
    定     义:将对象组合成树形结构以表示“整体-部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性优     点:              1、高层......
  • 设计模式简介及单例模式
    目录设计模式简介及单例模式单例模块实现的多种方式方式一:绑定给类的方法方式二:基于元类的类名加括号方式三:基于模块的单例模式方式四:定义一个装饰器实现单例模式方法五:基......
  • 设计模式利剑14-迭代器模式
    定     义:它提供一种方法访问一个容器对象中各个元素,而又不需暴露该对对象的内部细节,,Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以......
  • 设计模式利剑17-门面模式
    定     义:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行,门面模式提供一个高层次的接口,使得子系统更易于使用优     点:           ......
  • 设计模式利剑22--享元模式
    定     义:使用共享对象可以有效地支持大量的细粒度的对象,享元模式可以避免大量非常相似类的开销。在程序设计中有时需要生成大量细             粒度的......
  • js设计模式-类式继承
    js中怎么实现类式继承呢?首先声明父类,在声明子类,然后将父类的实例赋予给子类的原型就可以了。假设父类长这样:varBook=function(id,name,price){//私有的属性......
  • 设计模式汇总
    基础​​UML各种图总结​​​​依赖、关联、聚合和组合之间的区别​​设计模式的原则​​设计模式七大原则​​创建型​​简单工厂模式​​​​工厂方法模式​​​​抽象工......
  • vue之cli脚手架安装和webpack-simple模板项目生成
    ue-cli是一个官方发布vue.js项目脚手架,使用vue-cli可以快速创建vue项目。GitHub地址是:​​https://github.com/vuejs/vue-cli​​一、安装Nodejs首先需要安装Node环......
  • php 设计模式
    <?php//协程生成器函数并发classTest{publicfunctionasync(){$start=microtime(true);$url="https://money.finance.sina.com.c......