Golang und Designmuster-Fabrik Fabrikmuster

Das Fabrikmuster ist ein schöpferisches Entwurfsmuster.In dem Fabrikmuster bestimmt die Elternklasse, wie die Instanz erzeugt wird,bestimmt aber nicht die spezifische erzeugte Klasse.Die spezifische Verarbeitung wird vollständig der Unterklasse gegeben.

Das Factory-Muster besteht darin , das Template-Vorlagenmuster zu verwenden, um eine Factory zu erstellen, die Instanzen generiert. Aus diesem Grund müssen wir das Vorlagenmuster zuerst lernen, im Gegensatz zu anderen Bloggern, die das Lernen nach der Art des Entwurfsmusters in die letztere Kategorie einteilen.

Szenen

In dieser Ausgabe verwenden wir ein Programm zum Erstellen einer ID-Karte (IDCard), um das Werksmodell zu demonstrieren.

Grundtypen und Schnittstellen

Die alte Regel besteht darin, zuerst den grundlegenden Typ und die abstrakte Schnittstelle zu definieren.

Zuerst definieren wir eine Factory-Schnittstelle Factory und definieren drei Methoden: Create() zum öffentlichen Generieren von Instanzen, createProduct() für die tatsächlich generierten gekapselten Instanzen und registerProduct() zum Speichern zum Generieren von Instanzen

// 工厂接口
type Factory interface {
	// 对外公开的构建实例的方法
	Create(owner string) Product

	// 实际生成实例的方法
	createProduct(owner string) Product

	// 保存已生成的实例
	registerProduct(product Product)
}

Als nächstes kommt die Produktschnittstelle Product, die zwei Methoden definiert, eine ist die Methode GetOwner(), um den Produkthalter zu erhalten, und die andere ist die Use()-Methode, um das verwendete Produkt zu simulieren

// 产品接口
type Product interface {
	// 获取产品持有人名字
	GetOwner() string

	// 使用
	Use()
}

erreichen

Der nächste Schritt besteht darin, die spezifischen Typen zu definieren, die die obige Schnittstelle implementieren, nämlich die IDCardFactory, die Factory implementiert, und den IDCard-Typ, der Product implementiert

IDCardFactory

// 身份证工厂,实现了Factory接口
type IDCardFactory struct {
	products []Product `json:"products,omitempty"`
}

func (f *IDCardFactory) Create(owner string) Product {
	idCard := f.createProduct(owner)
	f.registerProduct(idCard)
	return idCard
}

func (f *IDCardFactory) createProduct(owner string) Product {
	return &IDCard{owner: owner}
}

func (f *IDCardFactory) registerProduct(idCard Product) {
	f.products = append(f.products, idCard)
}

Ausweis

// 身份证类型,实现了Product接口
type IDCard struct {
	owner string `json:"owner,omitempty"`
}

func (c *IDCard) GetOwner() string {
	return c.owner
}

func (c *IDCard) Use() {
	fmt.Printf("使用了%s的身份证抢火车票!\n", c.owner)
}

prüfen

func main() {
	var factory = &IDCardFactory{
		products: make([]Product, 0), //golang在声明结构体时,不会为结构体内的字段申请内存空间
	}

	card1 := factory.Create("小明")
	card1.Use()

	card2 := factory.Create("小红")
	card2.Use()
}

Testergebnisse

Der Code wurde auf Github hochgeladen: LyonNee/design_patterns_with_go: Golang-based design pattern code (github.com) 

Supongo que te gusta

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