1. package stratege
    2. import (
    3. "fmt"
    4. "testing"
    5. )
    6. type travel interface {
    7. goTravel(name string)
    8. }
    9. type travelByCar struct {
    10. }
    11. func (t *travelByCar) goTravel(name string) {
    12. fmt.Println(name + " travel by car")
    13. }
    14. type travelByPlane struct {
    15. }
    16. func (t *travelByPlane) goTravel(name string) {
    17. fmt.Println(name + " travel by plane")
    18. }
    19. type TravelContext struct {
    20. name string
    21. travel
    22. }
    23. func NewTravelContext(name string, travelType string) *TravelContext {
    24. t := &TravelContext{
    25. name: name,
    26. }
    27. switch travelType {
    28. case "轿车":
    29. t.travel = &travelByCar{}
    30. case "飞机":
    31. t.travel = &travelByPlane{}
    32. default:
    33. t.travel = &travelByCar{}
    34. }
    35. return t
    36. }
    37. func (t *TravelContext) GoTravel() {
    38. t.travel.goTravel(t.name)
    39. }
    40. func TestMain(t *testing.T) {
    41. p1 := NewTravelContext("小明", "轿车")
    42. p2 := NewTravelContext("小明", "飞机")
    43. p1.GoTravel()
    44. p2.GoTravel()
    45. }