abstract.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package Abstract_Factory
  2. import "fmt"
  3. //抽象工厂
  4. type AbstractFactory interface {
  5. CreateProductOne() AbstractProduct
  6. CreateProductTwo() AbstractProduct
  7. }
  8. //具体工厂
  9. type Factory1 struct{}
  10. func (*Factory1) CreateProductOne() AbstractProduct {
  11. fmt.Println("ProductOne by one")
  12. return &ProductOne{}
  13. }
  14. func (*Factory1) CreateProductTwo() AbstractProduct {
  15. fmt.Println("ProductTwo by one")
  16. return &ProductTwo{}
  17. }
  18. //type Factory2 struct{}
  19. //
  20. //func (*Factory2) CreateProductOne() *ProductThree {
  21. // fmt.Println("ProductThree by two")
  22. // return &ProductThree{}
  23. //}
  24. //func (*Factory2) CreateProductTwo() *ProductFour {
  25. // fmt.Println("ProductFour by two")
  26. // return &ProductFour{}
  27. //}
  28. //抽象产品
  29. type AbstractProduct interface {
  30. Introduce()
  31. }
  32. //具体产品
  33. type ProductOne struct{}
  34. func (*ProductOne) Introduce() {
  35. fmt.Println("This is product one")
  36. }
  37. type ProductTwo struct{}
  38. func (*ProductTwo) Introduce() {
  39. fmt.Printf("This is product two")
  40. }
  41. //具体产品
  42. //type ProductThree struct {}
  43. //func (*ProductThree)Introduce(){
  44. // fmt.Println("This is product three")
  45. //}
  46. //type ProductFour struct {}
  47. //func (*ProductFour)Introduce(){
  48. // fmt.Printf("This is product four")
  49. //}