L'éditeur php Youzi vous présentera comment appeler le modèle de stratégie en fonction du type entrant. Le modèle de stratégie est un modèle de conception orienté objet qui permet de sélectionner différents algorithmes ou stratégies en fonction de différentes situations. Dans le développement réel, nous devons souvent effectuer différentes opérations basées sur différents types. En utilisant le modèle de stratégie, nous pouvons encapsuler ces différentes opérations dans différentes classes de stratégies et appeler les stratégies correspondantes en fonction des types entrants pour obtenir un contrôle logique flexible. Ensuite, nous détaillerons comment utiliser le modèle de stratégie en PHP pour appeler la stratégie appropriée en fonction du type entrant.
J'ai deux stratégies. Sur la base des données demandées, je souhaite appeler la stratégie souhaitée et effectuer l'action sur une seule ligne. Comment puis-je atteindre cet objectif ? Mon code jusqu'à présent est comme ça
package strategy type strategy interface { distribute(request model.routerequest) (*model.distributeresponse, error) getstrategytype() int }
package strategy type strategy interface { distribute(request model.routerequest) (*model.distributeresponse, error) getstrategytype() int }
package strategies import ( "github.com/x/internal/enum" "github.com/x/internal/model" "github.com/x/internal/repository" ) type distributebranchstrategy struct { repo repository.repository } func newdistributebranchstrategy(repo repository.repository) *distributebranchstrategy { return &distributebranchstrategy{ repo: repo, } } func (d *distributebranchstrategy) distribute(request model.routerequest) (*model.distributeresponse, error) { return nil, nil } func (d *distributebranchstrategy) getstrategytype() int { return enum.branch }
package strategies import ( "github.com/x/internal/enum" "github.com/x/internal/model" "github.com/x/internal/repository" ) type distributetransfercenterstrategy struct { repo repository.repository } func newdistributetransfercenterstrategy(repo repository.repository) *distributetransfercenterstrategy { return &distributetransfercenterstrategy{ repo: repo, } } func (d *distributetransfercenterstrategy) distribute(request model.routerequest) (*model.distributeresponse, error) { return nil, nil } func (d *distributetransfercenterstrategy) getstrategytype() int { return enum.transfer_center }
Mes services :
package service import ( "github.com/x/internal/model" "github.com/x/internal/repository" "github.com/x/internal/strategy/strategies" ) type DistributeService struct { repo repository.Repository distributeBranchStrategy strategies.DistributeBranchStrategy } type Distribute interface { Distribute(vehicleNumberPlate string, request model.DistributeRequest) *model.DistributeResponse } func NewDistributeService(repo repository.Repository, strategy strategies.DistributeBranchStrategy) *DistributeService { return &DistributeService{ repo: repo, distributeBranchStrategy: strategy, } } func (d *DistributeService) Distribute(vehicleNumberPlate string, request model.DistributeRequest) *model.DistributeResponse { // TODO: Implement this method for _, x := range request.RouteRequest { d.distributeBranchStrategy.Distribute(x) } return nil }
Il y a quelques années, j'ai réalisé une opération en utilisant make[]. J'ai pu créer la politique appropriée et effectuer des actions basées sur les paramètres de la demande en les faisant correspondre à l'énumération. Je ne m'en souviens plus maintenant et je ne trouve aucun exemple sur Internet. Pouvez-vous m'aider?
Vous pouvez mettre toutes les stratégies disponibles sur la carte :
var strategies = map[int]func(repository.repository) strategy { enum.branch: func(repo repository.repository) strategy { return newdistributebranchstrategy(repo) }, ... }
Alors appelez :
s, ok: = strategies[x] if !ok { // error } s(repo).Distribute(...)
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!