首页 > 其他分享 >golang实现设计模式之模板模式-优缺点,适用场景

golang实现设计模式之模板模式-优缺点,适用场景

时间:2023-06-09 18:22:21浏览次数:40  
标签:子类 优缺点 golang 算法 RoleCoder func 设计模式 模板

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

特点

  • 1.算法结构已确定。
  • 2.具体实现交由子类实现。

结构

  • 1.抽象类(Abstract Class)。算法步骤可以被声明为抽象类型, 也可以提供一些默认实现。
  • 2.具体类(Concrete Class)。可以重写所有步骤, 但不能重写模板方法自身。

优缺点

  • 优点

1.复用。所有的子类可以复用父类中提供的模板方法的代码。
2.扩展。框架通过模板模式提供功能扩展点,基于扩展点进行扩展而不用修改源码。
3.行为父类控制,子类实现。

  • 缺点

1.每一个不同的实例,都需要一个子类来实现,导致类的个数增加。
2.算法发生变化,需要修改所有的类。

适用场景

  • 1.只希望客户端扩展某个特定算法步骤,而不是整个算法或其结构。
  • 2.当多个类的算法除一些细微不同之外几乎完全一样时,可使用该模式。但其后果就是,只要算法发生变化,就可能需要修改所有的类。

代码实现

package main

import "fmt"

// 1.abstract interface, define method
type iWork interface {
   getup()
   work()
   sleep()
}

// 2.org
type RoleCoder struct {
}

func (r *RoleCoder) getup() {
   fmt.Println("coder getup.")
}

func (r *RoleCoder) work() {
   fmt.Println("coder work.")
}

func (r *RoleCoder) sleep() {
   fmt.Println("coder sleep.")
}

// 3.concrete template
type Worker1 struct {
   iWork
}

func NewWork1(w iWork) *Worker1 {
   return &Worker1{w}
}

// implement concrete method
func (w *Worker1) Daily() {
   w.getup()
   w.work()
   w.sleep()
}

// client
func main() {
   worker := NewWork1(&RoleCoder{})
   worker.Daily()
}

参考文章:

标签:子类,优缺点,golang,算法,RoleCoder,func,设计模式,模板
From: https://www.cnblogs.com/davis12/p/17469989.html

相关文章

  • 基于网卡地址做设备指纹的优缺点
    生成设备指纹的目的是为了能唯一地标识设备,而且这个标识在设备的生命周期内保持稳定。因此,在选择设备特征时,通常需要考虑这些特征的唯一性和稳定性。软件及配置信息一版不适合,是因为这类变化虽然不大,但万一变化后,设备指纹会变,影响使用。比如:操作系统信息:操作系统版本、安装日......
  • 4月29日邓老师设计模式面试资料 一般有用 看1
    【金三银四】设计模式篇1.谈谈你对设计模式的理解1.首先谈设计模式的作用:经验的传承,提高了软件复用的水平,最终达到提高软件开发效率设计原则简单说明单一职责一个类只负责一项职责里氏替换原则子类可以扩展父类的功能,但不能改变父类原有的功能依赖倒置原则要依......
  • 9.3 模版设计模式
    抽象类的设计应该是比类更高一层的设计。抽象类最大好处:1.对子类方法对统一管理;2.可以自身提供有一些普通方法,并且这些普通方法可以调用抽象方法(这些抽象方法必须在有子类提供实现的时候才会生效)abstractclassAction{ //定义公共行为类 publicstaticfinal......
  • Golang 配置代理
    通过 goget 命令下载各种依赖时,经常需要访问github/google等网站。配置好代理后,可以快速稳定的访问。常用的go代理goproxyhttps://goproxy.io/zh/阿里云https://mirrors.aliyun.com/goproxy/七牛云https://goproxy.cn设置go代理go1.13及以上版本可以直接用下面......
  • 性能测试-第01天-从理解到体验,最后能够对比说出Loadrunner和JMeter的优缺点
    更多功能测试以及全套学习路线图均在专栏,↑↑戳进去领取~系列文章目录......
  • 序) 设计模式参考资料
    https://sourcemaking.com/design_patternshttp://javapapers.com/design-patterns/  DesignPatternsInsoftwareengineering,a designpattern isageneralrepeatablesolutiontoacommonlyoccurringprobleminsoftwaredesign.Adesignpatternisn't......
  • Golang之Reflect包
    Golang之Reflect什么是Golang的Reflect包?Golang的Reflect包(reflect)是一个强大的内置包,它提供了在运行时进行程序反射的功能。通过使用Reflect包,我们可以在不了解类型的情况下,动态地检查变量的类型、调用函数和方法,以及修改变量的值。为什么使用Golang的Reflect包?Golang的Reflec......
  • 设计模式系列 | 建造者模式
    很多人也都听说过建造者设计模式,但总是对这个设计模式理解得不够透彻,今天我们就来聊聊建造者设计模式。另外也说说建造者设计模式和工厂模式的区别。定义其实建造者设计模式的定义,很多事看不懂的,也是记不住的,但我们还是得先来看看是如何定义的。TheintentoftheBuilderdesignp......
  • 转载:Spring 框架的设计理念与设计模式分析
    Spring框架的设计理念与设计模式分析<!--LEADSPACE_BODY_END--><!--SUMMARY_BEGIN-->Spring作为现在最优秀的框架之一,已被广泛的使用,并且有很多对其分析的文章。本文将从另外一个视角试图剖析出Spring框架的作者设计Spring框架的骨骼架构的设计理念,有那几个核心组件?为......
  • 单例这种设计模式
    随着我们编写代码的深入,我们或多或少都会接触到设计模式,其中单例(Singleton)模式应该是我们耳熟能详的一种模式。本文将比较特别的介绍一下Java设计模式中的单例模式。概念单例模式,又称单件模式或者单子模式,指的是一个类只有一个实例,并且提供一个全局访问点。实现思路在单例的类中......