什么是模板模式?
- 模板模式即将具体处理交给子类,在父类中定义处理流程的框架,在子类中实现具体处理。
- 优点是在父类的模板方法中编写了算法,之后无需在每个子类中实现。
模板模式和桥接模式最大的区别
- 模板模式每次都要去继承抽象类的功能,而桥接模式不需要。
- 模板模式使用每次都需要New一个新对象,而桥接模式不需要。
示范代码(template.go)
package Template
import "fmt"
type WorkInterface interface {
GetUp()
Work()
Sleep()
}
// 工作者
type Worker struct {
WorkInterface
}
func NewWorker(w WorkInterface) *Worker {
return &Worker{w}
}
func (w *Worker) Daily() {
w.GetUp()
w.Work()
w.Sleep()
}
// 程序员
type Coder struct {
Worker
}
func (c *Coder) GetUp() {
fmt.Println("coder GetUp.")
}
func (c *Coder) Work() {
fmt.Println("coder Coding.")
}
func (c *Coder) Sleep() {
fmt.Println("coder Sleep.")
}
// 产品经理
type PM struct {
Worker
}
func (p *PM) GetUp() {
fmt.Println("pm GetUp.")
}
func (p *PM) Work() {
fmt.Println("pm Working.")
}
func (p *PM) Sleep() {
fmt.Println("pm Sleep.")
}
测试用例(template_test.go)
package Template
import (
"fmt"
"testing"
)
func TestNewWorker(t *testing.T) {
// 程序员和产品经理都是工作者
var worker1 *Worker = NewWorker(&Coder{})
worker1.Daily()
fmt.Println()
var worker2 *Worker = NewWorker(&PM{})
worker2.Daily()
}