package Abstract_Factory import "fmt" //抽象工厂 type AbstractFactory interface { CreateProductOne() AbstractProduct CreateProductTwo() AbstractProduct } //具体工厂 type Factory1 struct{} func (*Factory1) CreateProductOne() AbstractProduct { fmt.Println("ProductOne by one") return &ProductOne{} } func (*Factory1) CreateProductTwo() AbstractProduct { fmt.Println("ProductTwo by one") return &ProductTwo{} } //type Factory2 struct{} // //func (*Factory2) CreateProductOne() *ProductThree { // fmt.Println("ProductThree by two") // return &ProductThree{} //} //func (*Factory2) CreateProductTwo() *ProductFour { // fmt.Println("ProductFour by two") // return &ProductFour{} //} //抽象产品 type AbstractProduct interface { Introduce() } //具体产品 type ProductOne struct{} func (*ProductOne) Introduce() { fmt.Println("This is product one") } type ProductTwo struct{} func (*ProductTwo) Introduce() { fmt.Printf("This is product two") } //具体产品 //type ProductThree struct {} //func (*ProductThree)Introduce(){ // fmt.Println("This is product three") //} //type ProductFour struct {} //func (*ProductFour)Introduce(){ // fmt.Printf("This is product four") //}