Maison > développement back-end > Golang > le corps du texte

Comment appeler un modèle de stratégie en fonction du type entrant

王林
Libérer: 2024-02-08 21:12:26
avant
397 Les gens l'ont consulté

Comment appeler un modèle de stratégie en fonction du type entrant

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.

Contenu des questions

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
}
Copier après la connexion
Copier après la connexion
package strategy

type strategy interface {
    distribute(request model.routerequest) (*model.distributeresponse, error)
    getstrategytype() int
}
Copier après la connexion
Copier après la connexion
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
}
Copier après la connexion
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
}
Copier après la connexion

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
}
Copier après la connexion

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?

Solution

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)
   },
   ...
}
Copier après la connexion

Alors appelez :

s, ok: = strategies[x]
if !ok {
  // error
}
s(repo).Distribute(...)
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!