模板方法模式结构图如下。原理是过程实现不一样,但是执行的顺序是按照模板固定好了的。即简单理解为都有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. Vmware Workstation及Centos6.8 的安装

    转自:http://www.mamicode.com/info-detail-1462939.html 一.什么是Vmware Workstation Vmware Workstation是Vmwar ...

  2. 关于Tomcat的启动

    1.Tomcat分为安装版和解压版. 2.在Tomcat的解压版的bin路径下启动startup.bat的时候,如果没有启动成功,请检查是否设置了JAVA_HOME 3.建议不要在环境变量里面设置CA ...

  3. word2tex之类的问题

    首先就是这个word2tex一般是在word和tex文本互相转换的时候用的. 以前win7下用的chikrii忘了使用方法.. 之后再win10下用的excel2tex,但是转换时候总感觉不如word ...

  4. 乌班图 之 Ubuntu 16.04 LTS连接无线上网炒鸡慢问题!!!

    用VMware装了Ubuntu 16.04 LTS后连接无线上网,发现出奇的慢. 果断感觉有问题,立马找度娘,果然有问题!!! 网上查找亲测有效的方法为: 在终端运行:sudo gedit /etc/ ...

  5. 安卓怎么不如ios运行流畅

    一.优先级别不同:iOS最先响应屏幕当我们使用iOS或者是Android手机时,第一步就是滑屏解锁找到相应程序点击进入.而这个时候往往是所有操控开始的第一步骤,iOS系统产品就表现出来了流畅的一面,但 ...

  6. python继承 super()

    写这篇博文,始于以下问题的探究: #coding:utf-8 class A(object): def __init__(self): print 'enter A' print 'leave A' ...

  7. K-D树学习笔记

    这东西其实就是高维二叉树?(反正我只会二维的) 大概就是把一个高维矩形按每一维分,一个点(及其子树)就表示一个高维区间,乱搞一下,就……没了? //BZOJ4066 "简单"题 / ...

  8. springboot --> web 应用开发-CORS 支持

    一.Web 开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS 等等 CORS 与 JSONP 相比 1. JSONP 只能实现 GET 请求,而 CORS 支持所有类型的 HTT ...

  9. Zookeeper入门-Linux环境下异常ConnectionLossException解决

    实际项目开发中,用的是Linux环境.  中午突然断电,死活连不上Zookeeper,最终发现是需要关闭防火墙.    看日志,报错如下:  Exception in thread "mai ...

  10. 仿百度排列图片预览插件-Simple Lightbox

    很久以前遇到过这样的一个面试题,要求手写代码,实现百度图片的排列预览,并且可以左右点击查看下一张照片,当时没有做出来,这个问题也就一直放在了脑后,工作之后,遇到这样的需求之后,第一反应想到的是在源码网 ...