学习Go语言之策略模式
2020-12-13 04:46
标签:case var 接口 imp 策略 func 定义 src new 1.首先定义接口,所有的策略都是基于一套标准,这样策略(类)才有可替换性。声明一个计算策略接口 2.接着两个接口实现类。复习golang语言实现接口是非侵入式设计。 3.声明一个策略类。复习golang中规定首字母大写是public,小写是private。如果A,B改为小写a,b,在客户端调用时会报unknown field ‘a‘ in struct literal of type strategy.Context 4.客户端调用 学习Go语言之策略模式 标签:case var 接口 imp 策略 func 定义 src new 原文地址:https://www.cnblogs.com/shi2310/p/11122155.html1 package strategy
2
3 type ICompute interface {
4 Compute(a, b int) int
5 }
1 package strategy
2
3 type Add struct {
4 }
5
6 func (p *Add) Compute(a, b int) int {
7 return a + b
8 }
1 package strategy
2
3 type Sub struct {
4 }
5
6 func (p *Sub) Compute(a, b int) int {
7 return a - b
8 }
1 package strategy
2
3 var compute ICompute
4
5 type Context struct {
6 A, B int
7 }
8
9 // 用户端必须自己知道使用什么策略
10 func (p *Context) SetContext(s string) {
11 switch s {
12 case "+":
13 compute = new(Add)
14 break
15 case "-":
16 compute = new(Sub)
17 break
18 }
19 }
20
21 func (p *Context) Result() int {
22 return compute.Compute(p.A, p.B)
23 }
1 package main
2
3 import (
4 "fmt"
5 "myProject/StrategyDemo/strategy"
6 )
7
8 func main() {
9 c := strategy.Context{A: 15, B: 5}
10 c.SetContext("+")
11 fmt.Println(c.Result())
12 }