学习Go语言之模板方法模式
2024-10-01 06:12:04
模板方法模式结构图如下。原理是过程实现不一样,但是执行的顺序是按照模板固定好了的。即简单理解为都有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()
}
最新文章
- Linux 下 查看以及修改文件权限
- CSS3按钮效果
- UIImage两种初始化的区别
- Linux_shell脚本_遍历文件夹下所有文件
- POI对Excel
- poj2676 Sudoku(DFS)
- 百度翻译API
- Game shader or System shader is busy ::VS CSG
- hdu 5585 Numbers【大数+同余定理】
- linux 文本编辑器 vim 基本操作
- 基于CAShapeLayer以及UIBezierPath的语音输入效果动画封装
- Android-x86虚拟机安装配置全攻略
- LA 3882
- dependency injection via inversion of control
- EntityFramework6.X 之DbContex
- mac os x下Dreamweaver如何还原初始配置
- CentOS Android Studio桌面图标的创建
- 跨域iframe如何通信
- Solr在Linux中的安装
- 【原理、应用】Quartz集群原理及配置应用
热门文章
- VC++ LPARAMA 转换成CString
- Swift学习笔记(6):控制流
- jq操作属性,元素,样式,事件
- MySQL内置函数uuid和uuid_short
- HDU 1704 Rank【传递闭包】
- LA3231 Fair Share 二分_网络流
- while循环,格式化输出%,运算符,数据类型的转换,编码的初识,
- ActiveMQ:JMS开源框架入门介绍
- Mysql学习总结(23)——MySQL统计函数和分组查询
- 洛谷 P3671 [USACO17OPEN]Where's Bessie? 贝西在哪呢