추상 팩토리 추상 팩토리 패턴은 생성 디자인 패턴입니다. 추상 팩토리 패턴은 팩토리 팩토리 메소드 패턴과 마찬가지로 열고 닫는 원칙을 따릅니다. 그러나 차이점은 팩토리 메소드 패턴이 특정 제품을 추가할 때 해당 팩토리를 추가해야 한다는 점이다. 그러나 추상 팩토리 패턴은 특정 유형의 제품을 추가할 때만 새 팩토리를 추가하면 됩니다 .
장면
이 기사에서는 추상 공장 패턴을 설명하기 위해 전자 제품을 생산하는 전자 공장을 예로 들 것입니다.
두 가지 유형의 제품인 Phone 및 Pad와 두 가지 다른 제조업체 브랜드인 Apple 및 Huawei를 정의합니다.
기본 유형 및 인터페이스
먼저 전화 인터페이스 Phone과 통화 메서드 Call()을 정의합니다.
// 手机接口
type Phone interface {
Call()
}
태블릿 컴퓨터 인터페이스 Pad 및 게임 플레이 방법 PlayGame()
// 平板电脑接口
type Pad interface {
PlayGame()
}
다음으로 추상적인 factory-ElectronicsFactory와 다른 제품을 만드는 데 사용되는 메서드를 정의합니다.
// 电子工厂接口,生成电子产品,包括 手机、平板等
type ElectronicsFactory interface {
CreatePhone() Phone
CreatePad() Pad
}
성취하다
먼저 Apple 공장의 특정 구현과 해당 제품 Phone 및 Pad의 특정 구현을 정의합니다.
// 苹果工厂,具体工厂
type AppleFactory struct{}
func (f *AppleFactory) CreatePhone() Phone {
return &IPhone{}
}
func (f *AppleFactory) CreatePad() Pad {
return &IPad{}
}
// 苹果手机
type IPhone struct{}
func (p *IPhone) Call() {
fmt.Println("正在使用 IPhone 打电话")
}
// 苹果平板电脑
type IPad struct{}
func (p *IPad) PlayGame() {
fmt.Println("正在使用 IPad 打游戏")
}
다음은 Huawei 공장과 생산 제품의 구체적인 구현입니다.
// 华为工厂,具体工厂
type HuaweiFactory struct{}
func (f *HuaweiFactory) CreatePhone() Phone {
return &Mate40{}
}
func (f *HuaweiFactory) CreatePad() Pad {
return &MatePad{}
}
// 华为手机
type Mate40 struct{}
func (p *Mate40) Call() {
fmt.Println("正在使用 Mate40 打电话")
}
// 华为平板电脑
type MatePad struct{}
func (p *MatePad) PlayGame() {
fmt.Println("正在使用 MatePad 打游戏")
}
시험
func main() {
// 苹果工厂
appleFactory := &AppleFactory{}
phone1 := appleFactory.CreatePhone()
phone1.Call()
pad1 := appleFactory.CreatePad()
pad1.PlayGame()
// 华为工厂
huaweiFactory := &HuaweiFactory{}
phone2 := huaweiFactory.CreatePhone()
phone2.Call()
pad2 := huaweiFactory.CreatePad()
pad2.PlayGame()
}
연산 결과
결과는 예상대로입니다.
코드가 Github에 업로드되었습니다: LyonNee/design_patterns_with_go: Golang 기반 디자인 패턴 코드(github.com)