build.go 877 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package build
  2. //建造者模式
  3. type Product struct {
  4. Message string
  5. }
  6. type Product2 struct {
  7. Message int
  8. }
  9. type Builder interface {
  10. Part1()
  11. Part2()
  12. Part3()
  13. getProduct() Product
  14. }
  15. type Director struct {
  16. builder Builder
  17. }
  18. func NewDirector(builder Builder) *Director {
  19. return &Director{
  20. builder: builder,
  21. }
  22. }
  23. type Builder1 struct {
  24. product Product
  25. }
  26. func (b *Builder1) Part1() {
  27. b.product.Message += "1"
  28. }
  29. func (b *Builder1) Part2() {
  30. b.product.Message += "2"
  31. }
  32. func (b *Builder1) Part3() {
  33. b.product.Message += "3"
  34. }
  35. func (b *Builder1) GetResult() Product {
  36. return b.product
  37. }
  38. type Builder2 struct {
  39. product Product2
  40. }
  41. func (b *Builder2) Part1() {
  42. b.product.Message += 1
  43. }
  44. func (b *Builder2) Part2() {
  45. b.product.Message += 2
  46. }
  47. func (b *Builder2) Part3() {
  48. b.product.Message += 3
  49. }
  50. func (b *Builder2) GetResult() Product2 {
  51. return b.product
  52. }