Golang과 디자인 패턴 - 추상 공장 추상 공장 패턴

추상 팩토리 추상 팩토리 패턴은 생성 디자인 패턴입니다. 추상 팩토리 패턴은 팩토리 팩토리 메소드 패턴과 마찬가지로 열고 닫는 원칙을 따릅니다. 그러나 차이점은 팩토리 메소드 패턴이 특정 제품을 추가할 때 해당 팩토리를 추가해야 한다는 점이다. 그러나 추상 팩토리 패턴은 특정 유형의 제품을 추가할 때만 새 팩토리를 추가하면 됩니다 .

장면

이 기사에서는 추상 공장 패턴을 설명하기 위해 전자 제품을 생산하는 전자 공장을 예로 들 것입니다.

두 가지 유형의 제품인 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) 

Supongo que te gusta

Origin blog.csdn.net/Lyon_Nee/article/details/119791057
Recomendado
Clasificación