模版方法模式
文章目录
模版方法模式意在定义一个操作中的算法框架,将公共的操作抽象出来放在抽象接口中定义出一套抽象框架,而不同的操作实现则延迟到子类去实现
例如做饭这一个操作中可能有多个子操作:
- 开煤气
- 开火
- 做饭
- 关火
- 关煤气
其中除了做饭不同其他都是相同的,那么相同的就可以放在抽象类中实现,不同的则延迟到子类实现
代码目录结构:
.
├── Impl
│ └── KevinCookie.go
├── abstractImpl
│ └── abstrateCookie.go
├── docookie_test.go
└── mytemplate
└── cookieTemplate.go
操作框架抽象到接口中
// DoCookie 做饭操作模版
package mytemplate
// DoCookie 做饭操作模版
type DoCookie interface {
Open()
Fire()
Cookie()
CloseFire()
Close()
}
抽象实现:实现了公共的一样的操作
package abstractImpl
import "fmt"
// AbstrateCookie 抽象做饭类
type AbstrateCookie struct {
}
// open 开煤气
func (c *AbstrateCookie) Open() {
fmt.Print("开煤气")
}
// fire 点火
func (c *AbstrateCookie) Fire() {
fmt.Print("开煤气")
}
// 做饭
func (c *AbstrateCookie) Cookie() {
fmt.Print("开煤气")
}
// closeFire 关火
func (c *AbstrateCookie) CloseFire() {
fmt.Print("开煤气")
}
// 关煤气
func (c *AbstrateCookie) Close() {
fmt.Print("开煤气")
}
不同操作的具体实现交给抽象类的子类实现:
package Impl
import (
"awesomeProject3/abstractMethod/abstractImpl"
"fmt"
)
// KevinCookie kevin做饭
type KevinCookie struct {
abstractImpl.AbstrateCookie
}
func (c *KevinCookie) Cookie() {
fmt.Print("Kevin今日做饭,做的是西红柿炒鸡蛋")
}