關(guān)于策略模式下需要用到一個接口多個實現(xiàn)的方案
http://www.reibang.com/p/0753de68244c
此鏈接是策略模式的案例家妆,講述多個優(yōu)惠策略實現(xiàn)同一個接口的應(yīng)用場景
我們需要用到DI的高級玩法:
在接口定義方法標識
優(yōu)惠策略接口抽象出一個方法Get() 獲取優(yōu)惠舔哪,優(yōu)惠的實現(xiàn)有很多挖滤,我們需要在Startup注入所有的優(yōu)惠策略的實現(xiàn)
public interface IActivitiesStrategy
{
string Realize { get; }
/// <summary>
/// 獲取則扣策略
/// </summary>
/// <returns></returns>
double GetDiscountStrategy();
}
在優(yōu)惠策略的具體實現(xiàn)上寫出方法標識
public class DoubleElevenActivities : IActivitiesStrategy
{
public string Realize => "雙十一優(yōu)惠";
public double GetDiscountStrategy()
{
return 0.11;
}
}
public class DoubleTwelveActivities : IActivitiesStrategy
{
public string Realize => "雙十二優(yōu)惠";
public double GetDiscountStrategy()
{
return 0.12;
}
}
注冊所有方法
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IActivitiesStrategy, DoubleElevenActivities>();
services.AddTransient<IActivitiesStrategy, DoubleTwelveActivities>();
services.AddMvc();
}
在使用時候判斷使用什么策略
public class ValuesController : ControllerBase
{
private readonly IEnumerable<IActivitiesStrategy> _activitiesStrategy;
public ValuesController(IEnumerable<IActivitiesStrategy> activitiesStrategy)
{
_activitiesStrategy = activitiesStrategy;
}
// GET api/values
[HttpGet]
public ActionResult<double> Get(string tag)
{
var method = _activitiesStrategy.Where(x => x.Realize == tag).FirstOrDefault();
if (method != null)
{
return method.GetDiscountStrategy();
}
return 1;
}
}