Go 디자인 패턴 : 공장
16861 단어 beginnersgoproductivityprogramming
기본 클래스에서 개체의 "팩토리"를 만들고 상속된 클래스의 동작을 수정할 수 있는 다형성 동작을 구현할 수 있게 해주는 생성 패턴입니다.
일반적으로 일련의 개체를 공유하는 생성 논리를 재사용하는 데 사용됩니다.
Go는 엄밀히 말하면 객체 지향 언어는 아니지만 인터페이스와 상속에 대한 구성 개념을 통해 OOP 논리를 구현할 수 있습니다.
예시
유사한 방식으로 작동하는 일련의 제품(객체)이 있습니다. 각각에 대해 별도의 클래스를 만들거나 이 모든 논리를 기본 클래스에 넣어 각 제품에 대해 상속된 클래스를 만들 수 있습니다.
type IProduct interface {
setStock(stock int)
getStock() int
setName(name string)
getName() string
}
type Computer struct {
name string
stock int
}
func (c *Computer) setStock(stock int) {
c.stock = stock
}
func (c *Computer) getStock() int {
return c.stock
}
func (c *Computer) setName(name string) {
c.name = name
}
func (c *Computer) getName() string {
return c.name
}
type Laptop struct {
Computer
}
func newLaptop() IProduct {
return &Laptop{
Computer: Computer{
name: "Laptop Computer",
stock: 0,
},
}
}
type Desktop struct {
Computer
}
func newDesktop() IProduct {
return &Desktop{
Computer: Computer{
name: "Desktop Computer",
stock: 0,
},
}
}
func GetComputerFactory(computerType string) (IProduct, error) {
if computerType == "laptop" {
return newLaptop(), nil
} else if computerType == "desktop" {
return newDesktop(), nil
} else {
return nil, fmt.Errorf("invalid computer type")
}
}
코드 실행
func PrintNameAndStock(p IProduct) {
fmt.Printf("Product name: %s, with stock %d\n", p.getName(), p.getStock())
}
func main() {
laptop, _ := GetComputerFactory("laptop")
desktop, _ := GetComputerFactory("desktop")
laptop.setStock(10)
PrintNameAndStock(laptop)
desktop.setStock(20)
PrintNameAndStock(desktop)
}
산출
Product name: Laptop Computer, with stock 10
Product name: Desktop Computer, with stock 20
전체 예
package main
import "fmt"
type IProduct interface {
setStock(stock int)
getStock() int
setName(name string)
getName() string
}
type Computer struct {
name string
stock int
}
func (c *Computer) setStock(stock int) {
c.stock = stock
}
func (c *Computer) getStock() int {
return c.stock
}
func (c *Computer) setName(name string) {
c.name = name
}
func (c *Computer) getName() string {
return c.name
}
type Laptop struct {
Computer
}
func newLaptop() IProduct {
return &Laptop{
Computer: Computer{
name: "Laptop Computer",
stock: 0,
},
}
}
type Desktop struct {
Computer
}
func newDesktop() IProduct {
return &Desktop{
Computer: Computer{
name: "Desktop Computer",
stock: 0,
},
}
}
func GetComputerFactory(computerType string) (IProduct, error) {
if computerType == "laptop" {
return newLaptop(), nil
} else if computerType == "desktop" {
return newDesktop(), nil
} else {
return nil, fmt.Errorf("invalid computer type")
}
}
func PrintNameAndStock(p IProduct) {
fmt.Printf("Product name: %s, with stock %d\n", p.getName(), p.getStock())
}
func main() {
laptop, _ := GetComputerFactory("laptop")
desktop, _ := GetComputerFactory("desktop")
laptop.setStock(10)
PrintNameAndStock(laptop)
desktop.setStock(20)
PrintNameAndStock(desktop)
}
도움이 되셨기를 바랍니다 😊😊
Reference
이 문제에 관하여(Go 디자인 패턴 : 공장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/cristianfrancisco85/go-design-patterns-factory-1jd1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)