模板方法模式结构图如下。原理是过程实现不一样,但是执行的顺序是按照模板固定好了的。即简单理解为都有1,2,3步骤,但是每一步的实现交由具体实现类不同实现。

1.过程式编程

 // 模板方法模式
package main import "fmt" type Template interface {
fun1()
fun2()
} //此处采取过程式编程,因为Go没有抽象类的概念
func result(t Template) {
t.fun1()
t.fun2()
} type ConcreteA struct{} func (c *ConcreteA) fun1() {
fmt.Println("A类实现fun1")
} func (c *ConcreteA) fun2() {
fmt.Println("A类实现fun2")
} type ConcreteB struct{} func (c *ConcreteB) fun1() {
fmt.Println("B类实现fun1")
} func (c *ConcreteB) fun2() {
fmt.Println("B类实现fun2")
} func main() {
// var ta = new(ConcreteA)
// result(ta) var tb = new(ConcreteB)
result(tb)
}

2.面向对象编程

 // 模板方法模式
package main import "fmt" type Template interface {
fun1()
fun2()
Result()
} // 抽象结构体
type Funcs struct {
temp Template
} // 抽象结构体部分实现接口
func (r *Funcs) Result() {
r.temp.fun2()
r.temp.fun1()
} //A具体实现。继承自抽象结构体的方法+自身实现的方法=实现Template接口
type ConcreteA struct {
//会继承抽象结构体中的方法
Funcs
} func (c *ConcreteA) fun1() {
fmt.Println("A类实现fun1")
} func (c *ConcreteA) fun2() {
fmt.Println("A类实现fun2")
} //B具体实现。继承自抽象结构体的方法+自身实现的方法=实现Template接口
type ConcreteB struct {
//会继承抽象结构体中的方法
Funcs
} func (c *ConcreteB) fun1() {
fmt.Println("B类实现fun1")
} func (c *ConcreteB) fun2() {
fmt.Println("B类实现fun2")
} func main() {
interf := new(ConcreteB)
fmt.Printf("%P \n", interf.Funcs)
// interf.Result() 此处报空指针错误,因为new(ConcreteB),其中方法Funcs并未实例化,也就不存在Result() ta := Funcs{temp: interf}
ta.Result()
}

学习Go语言之模板方法模式的更多相关文章

  1. C#设计模式学习笔记:(13)模板方法模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7837716.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲行为型设计模式的第一个模式--模 ...

  2. 设计模式学习笔记——Template Method模板方法模式

    可能是最简单的设计模式. 而且你我都用过而不自知. 因为,模板方法模式也者,就是面向对象中的继承.公用部分放在父类,子类继承父类,然后扩展.呵呵.

  3. Java学习笔记——设计模式之七.模板方法模式

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

  4. 设计模式(九): 从醋溜土豆丝和清炒苦瓜中来学习"模板方法模式"(Template Method Pattern)

    今天是五.四青年节,祝大家节日快乐.看着今天这标题就有食欲,夏天到了,醋溜土豆丝和清炒苦瓜适合夏天吃,好吃不上火.这两道菜大部分人都应该吃过,特别是醋溜土豆丝,作为“鲁菜”的代表作之一更是为大众所熟知 ...

  5. 【2016-10-13】【坚持学习】【Day4】【模板方法模式】

    今天学习模板方法模式 例子代码; 模板抽象类,定义了一套流程,有一些方法已经实现,有一些抽象方法需要继承它的子类实现 abstract class DataViewer { //抽象方法:获取数据 p ...

  6. 再起航,我的学习笔记之JavaScript设计模式17(模板方法模式)

    模板方法模式 由模板方法模式开始我们正式告别结构型设计模式,开始行为型设计模式的学习分享 行为型设计模式用于不同对象之间职责划分或算法抽象,行为型设计模式不仅仅涉及类和对象,还涉及类或对象之间的交流模 ...

  7. Java设计模式学习记录-模板方法模式

    前言 模板方法模式,定义一个操作中算法的骨架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤. 模板方法模式 概念介绍 模板方法模式,其实是很好理解的,具体 ...

  8. swift设计模式学习 - 模板方法模式

    移动端访问不佳,请访问我的个人博客 设计模式学习的demo地址,欢迎大家学习交流 模板方法模式 模板方法模式,定义一个操作中算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结 ...

  9. 设计模式学习之模板方法模式(TemplateMethod,行为型模式)(9)

    一.什么是模板方法模式 Template Method模式也叫模板方法模式,是行为模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为. ...

随机推荐

  1. JavaScript实现双向链表

    title: JavaScript实现双向链表 toc: false date: 2018-10-07 10:11:36 append(element): 添加元素到链表尾部 insert(posit ...

  2. pip更新问题

    pip更新及Requirement already up-to-date解决方法 pip更新 更新命令 将pip更新版本 1 python -m pip install --upgrade pip R ...

  3. Charles抓取微信小程序数据 以及 其它应用网站数据

    为了抓取小程序数据所以使用Charles来抓取,下面介绍下使用方法(mac环境下使用).使用Charles可以非常方便的抓取Http/Https请求.官方dmg下载地址:点击此处下载 Charles抓 ...

  4. redis在项目中的使用(单机版、集群版)

    1.下载jar包:jedis-2.6.2.jar 2.代码: JedisDao.java: package com.test.www.dao; public interface JedisDao { ...

  5. 【转载】大型系统中使用JMS优化技巧

    [本文转自:http://www.javabloger.com/article/sun-openmq-jms-large-scale-systems.html] 我们先来看看在Sun OpenMQ系统 ...

  6. 为什么在3ds Max 按系统默认的快捷键AIT+W 视口最大化切换没反应?

    经常使用3ds Max快捷键做效果图可谓是提高作图速度的毕竟之路,做效果图的朋友或许会遇到最大化视口显示失灵的问题,max默认快捷键为Alt+W,这里我不建议大家更改max的默认快捷键,当然Max也提 ...

  7. JWT的初步了解以及session、cookie机制

    1.什么是状态保持? 想要了解JWT,首先需要知道什么是状态保持,举一个例子来说:无论是在web上还是在手机app上,我们都可以以游客的身份访问,此时都会有登录/注册字眼,当我们登录之后,就会是我们的 ...

  8. WebKit.NET-0.5简单应用(2)——音量解决方案

    查找WebKit.NET相关文档,没有找到音量控制解决方法.换思路进行解决,尝试用Win32 API进行解决 [DllImport("winmm.dll")] public sta ...

  9. 有趣的console

    博文第一篇,就以前端调试的“座上客”---console开始

  10. POJ3764 The xor-longest Path(字典树)

    题意 给你一棵树,n个节点,n-1条边每条边i都有一个权值wi.定义任意两点间的权值为:这两点间的路径上的所有边的值的异或.比如a点和b点间有i,j,k三条边,那么ab两点间的权值为:wi^wj^wk ...