• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

学习Go语言之模板方法模式

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

1.过程式编程

 1 // 模板方法模式
 2 package main
 3 
 4 import "fmt"
 5 
 6 type Template interface {
 7     fun1()
 8     fun2()
 9 }
10 
11 //此处采取过程式编程,因为Go没有抽象类的概念
12 func result(t Template) {
13     t.fun1()
14     t.fun2()
15 }
16 
17 type ConcreteA struct{}
18 
19 func (c *ConcreteA) fun1() {
20     fmt.Println("A类实现fun1")
21 }
22 
23 func (c *ConcreteA) fun2() {
24     fmt.Println("A类实现fun2")
25 }
26 
27 type ConcreteB struct{}
28 
29 func (c *ConcreteB) fun1() {
30     fmt.Println("B类实现fun1")
31 }
32 
33 func (c *ConcreteB) fun2() {
34     fmt.Println("B类实现fun2")
35 }
36 
37 func main() {
38     // var ta = new(ConcreteA)
39     // result(ta)
40 
41     var tb = new(ConcreteB)
42     result(tb)
43 }

2.面向对象编程

 1 // 模板方法模式
 2 package main
 3 
 4 import "fmt"
 5 
 6 type Template interface {
 7     fun1()
 8     fun2()
 9     Result()
10 }
11 
12 // 抽象结构体
13 type Funcs struct {
14     temp Template
15 }
16 
17 // 抽象结构体部分实现接口
18 func (r *Funcs) Result() {
19     r.temp.fun2()
20     r.temp.fun1()
21 }
22 
23 //A具体实现。继承自抽象结构体的方法+自身实现的方法=实现Template接口
24 type ConcreteA struct {
25     //会继承抽象结构体中的方法
26     Funcs
27 }
28 
29 func (c *ConcreteA) fun1() {
30     fmt.Println("A类实现fun1")
31 }
32 
33 func (c *ConcreteA) fun2() {
34     fmt.Println("A类实现fun2")
35 }
36 
37 //B具体实现。继承自抽象结构体的方法+自身实现的方法=实现Template接口
38 type ConcreteB struct {
39     //会继承抽象结构体中的方法
40     Funcs
41 }
42 
43 func (c *ConcreteB) fun1() {
44     fmt.Println("B类实现fun1")
45 }
46 
47 func (c *ConcreteB) fun2() {
48     fmt.Println("B类实现fun2")
49 }
50 
51 func main() {
52     interf := new(ConcreteB)
53     fmt.Printf("%P \n", interf.Funcs)
54     // interf.Result() 此处报空指针错误,因为new(ConcreteB),其中方法Funcs并未实例化,也就不存在Result()
55 
56     ta := Funcs{temp: interf}
57     ta.Result()
58 }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
04.go命令行发布时间:2022-07-10
下一篇:
Getting Started with Cloud Native Go Cloud Native Go入门 Lynda课程中文字幕 ...发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap