代码改变世界

模板方法模式

2015-07-08 09:02  foolbread-老陈  阅读(143)  评论(0编辑  收藏  举报

   模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。——《HEAD FIRST 设计模式》

   我的golang代码:

 1 package template
 2 
 3 import (
 4     "fmt"
 5 )
 6 
 7 type Caffeine interface {
 8     brew()
 9     addCondiments()
10 }
11 
12 ///////////////////////////////////////////////
13 type Tea struct {
14 }
15 
16 func (t *Tea) brew() {
17     fmt.Println("tea brew!")
18 }
19 
20 func (t *Tea) addCondiments() {
21     fmt.Println("tea addCondiments!")
22 }
23 
24 //////////////////////////////////////////////
25 type Coffee struct {
26 }
27 
28 func (t *Coffee) brew() {
29     fmt.Println("coffee brew!")
30 }
31 
32 func (t *Coffee) addCondiments() {
33     fmt.Println("coffee addCondiments!")
34 }
35 
36 //////////////////////////////////////////////
37 type CaffeineBeverage struct {
38     Caffeine
39 }
40 
41 func NewCaffeineBeverage(c Caffeine) *CaffeineBeverage {
42     t := new(CaffeineBeverage)
43     t.Caffeine = c
44     return t
45 }
46 
47 func (t *CaffeineBeverage) PrepareRecipe() {
48     t.boilWater()
49     t.brew()
50     t.pourInCup()
51     t.addCondiments()
52 }
53 
54 func (t *CaffeineBeverage) boilWater() {
55     fmt.Println("boilWater!")
56 }
57 
58 func (t *CaffeineBeverage) pourInCup() {
59     fmt.Println("pourInCup!")
60 }

   个人感悟:待留。