La fermeture est une technique qui lie une fonction à l'environnement variable auquel elle accède. Dans Golang, il est largement utilisé dans les modèles de conception tels que : Modèle d'usine : encapsule les méthodes d'usine et les données privées pour créer des types spécifiques d'objets. Modèle de stratégie : encapsule les méthodes de stratégie et les données privées pour basculer entre les algorithmes. Modèle d'observateur : encapsule les méthodes d'observateur et les données privées pour s'abonner à d'autres événements d'objet.
Modèles de conception de fermeture dans les projets Golang
Introduction
Les fermetures sont une technique puissante qui lie une fonction et les variables auxquelles elle accède. Dans Golang, les fermetures sont largement utilisées pour améliorer la lisibilité, la réutilisabilité et la maintenabilité du code.
Qu'est-ce que la fermeture ?
Une fermeture se compose de deux parties :
Lorsqu'une fonction imbriquée est appelée, elle exécute non seulement son propre code, mais accède également à l'environnement variable auquel elle appartient. Ce comportement permet aux fermetures d'encapsuler des données privées tout en permettant aux fonctions externes d'accéder à ces données.
Fermetures dans les modèles de conception
Les fermetures peuvent être appliquées à une variété de modèles de conception dans les projets Golang, notamment :
Cas pratique : Factory Pattern
Ce qui suit montre un exemple du Factory Pattern implémenté à l'aide de fermetures :
package main import ( "fmt" ) func main() { // 定义工厂函数,其中闭包封装了创建特定对象所需的私有数据。 createAnimalFactory := func(animalType string) func() Animal { switch animalType { case "dog": return func() Animal { return &Dog{name: "Fido"} } case "cat": return func() Animal { return &Cat{name: "Whiskers"} } default: return nil } } // 创建不同的动物。 dogFactory := createAnimalFactory("dog") dog := dogFactory() fmt.Println(dog) catFactory := createAnimalFactory("cat") cat := catFactory() fmt.Println(cat) } // Animal 接口定义了所有动物类型共享的方法。 type Animal interface { GetName() string } // Dog 类型实现了 Animal 接口。 type Dog struct { name string } func (d *Dog) GetName() string { return d.name } // Cat 类型实现了 Animal 接口。 type Cat struct { name string } func (c *Cat) GetName() string { return c.name }
Dans cet exemple, la fermeture renvoie animalType
变量保存在其变量环境中,使 createAnimalFactory
函数可以根据不同的 animalType
valeurs à différentes fonctions de création.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!