Go의 전략 패턴
9381 단어 godesignpattern
다른 비행 행동을 가진 다른 유형의 새가있을 수 있습니다.
낮게 나는 앵무새, 높이 나는 독수리, 날지 않는 타조
Bird 인터페이스부터 시작하겠습니다.
// Interface
type Bird interface {
Fly()
Display()
}
따라서 Fly() 및 Display()를 구현하는 모든 것이 Bird입니다.
앵무새
type Parrot struct {
color string
}
func (p *Parrot) Fly() {
fmt.Println("I can fly")
}
func (p *Parrot) Display() {
fmt.Printf("I am a Parrot . I have color =%s", p.color)
}
또는 독수리
type Eagle struct {
color string
}
func (p *Eagle) Fly() {
fmt.Println("I can fly high")
}
func (p *Eagle) Display() {
fmt.Printf("I am a Eagle . I have color =%s", p.color)
}
보시다시피 Fly()는 많은 입찰에 대한 공통 메커니즘이므로 이를 공통 구조로 옮길 수 있습니다.
Java에서는 몇 가지 공통 메서드가 구현된 추상 클래스를 만들고 나중에 추상 클래스를 확장하여 다양한 동작을 구현합니다.
Go에서는 Fly() 메서드를 부분적으로 구현하는 유형을 만들 수 있습니다.
//abstracting out just flying behaviour
type FlyStrategy struct {
doFly FlyBehaviour
}
func (f *FlyStrategy) Fly() {
f.doFly()
}
FlyBehaviour
로 새가 나는 방법을 추출합니다.type FlyBehaviour func()
func FlywithWings() {
fmt.Println("I am flying with my wings")
}
func FlyNoWay() {
fmt.Println("I can't fly")
}
func FlyHigh(){
fmt.Println("I am flying high")
}
이제 Java에서 이 동작을 확장하려면
extend
를 사용하지만 Go는 고전적인 의미에서 상속을 지원하지 않습니다. 대신 in은 유형의 기능을 확장하는 방법으로 구성을 권장합니다. Go는 보다 원활한 유형 구성을 표현하기 위해 구조체 및 인터페이스의 삽입을 지원합니다.따라서
FlyStrategy
를 확장하기 위해 간단히 Parrot
유형에 삽입합니다.// Implementation of Parrot with FlyStrategy embed
type Parrot struct {
color string
FlyStrategy
}
func (p *Parrot) Display() {
fmt.Printf("I am a Parrot . I have color = %s", p.color)
}
func main() {
var greenParrot Bird
greenParrot = &Parrot{
color: "green",
FlyStrategy: FlyStrategy{doFly: FlywithWings},
}
greenParrot.Fly()
greenParrot.Display()
}
이 패턴의 장점은 비행 전략을 동적으로 업데이트할 수 있다는 것입니다.
// Interface
type Bird interface {
Fly()
Display()
//new
UpdateFlyStrategy(flyb FlyBehaviour)
}
....
....
type FlyStrategy struct {
doFly FlyBehaviour
}
func (f *FlyStrategy) Fly() {
f.doFly()
}
//new
func (f *FlyStrategy) UpdateFlyStrategy(flyb FlyBehaviour) {
f.doFly = flyb
}
....
....
greenParrot.UpdateFlyStrategy(FlyHigh)
greenParrot.Fly()
Reference
이 문제에 관하여(Go의 전략 패턴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/shsethi/strategy-pattern-in-go-488a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)