editor php Youzi akan memperkenalkan anda cara memanggil corak strategi berdasarkan jenis yang masuk. Corak strategi ialah corak reka bentuk berorientasikan objek yang membolehkan algoritma atau strategi yang berbeza dipilih mengikut situasi yang berbeza. Dalam pembangunan sebenar, kita sering perlu melakukan operasi yang berbeza berdasarkan jenis yang berbeza. Dengan menggunakan corak strategi, kita boleh merangkum operasi yang berbeza ini ke dalam kelas strategi yang berbeza dan memanggil strategi yang sepadan berdasarkan jenis yang masuk untuk mencapai kawalan logik yang fleksibel. Seterusnya, kami akan memperincikan cara menggunakan corak strategi dalam PHP untuk memanggil strategi yang sesuai berdasarkan jenis yang masuk.
Saya ada dua strategi. Berdasarkan data yang diminta, saya ingin memanggil strategi yang saya inginkan dan melakukan tindakan dalam satu baris. Bagaimanakah saya boleh mencapai matlamat ini? Kod saya setakat ini adalah seperti ini
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 }
Perkhidmatan saya:
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 }
Beberapa tahun lalu, saya melakukan pembedahan menggunakan make[]. Saya dapat mencipta dasar yang berkaitan dan melakukan tindakan berdasarkan parameter dalam permintaan dengan memadankannya dengan penghitungan. Saya tidak dapat mengingatnya sekarang dan saya tidak dapat mencari sebarang contoh di internet. boleh tolong saya?
Anda boleh meletakkan semua strategi yang ada ke dalam peta:
var strategies = map[int]func(repository.repository) strategy { enum.branch: func(repo repository.repository) strategy { return newdistributebranchstrategy(repo) }, ... }
Kemudian hubungi:
s, ok: = strategies[x] if !ok { // error } s(repo).Distribute(...)
Atas ialah kandungan terperinci Cara memanggil corak strategi berdasarkan jenis masuk. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!