设计模式 -- 策略模式和简单工厂的结合
#####1 策略模式(Strategy)介绍和优缺点
#####2 策略模式和简单工厂的结合
#####3 策略模式的应用
设计模式:面向对象语言开发过程中,对各种问题和场景的解决方案的沉淀, 是解决问题的套路, 提出场景--解决问题--总结沉淀--推广应用
行为型设计模式:关注对象和行为的分离
设计模式都是为了解决一类问题而存在的,往往在解决一类问题的同时会带来的新的问题,会有对应的解决方案。设计模式不是万能的
程序设计:不关系功能性,关注的非功能性的要求,程序的扩展性--可读性--健壮性
策略模式已经完成了!
策略模式应对业务处理中,会有多种相似处理方式(算法),然后封装成算法+抽象,此外,调用环节也有扩展要求的,来个context
好处:算法封装,有抽象可以扩展; 调用环节转移,可以扩展;
缺陷:上端必须知道全部算法,而且知道映射关系
最终我们会解决问题,但是这个不属于策略模式
//3 转移了算法创建以及映射关系,封装了一下
//iCaculation = Factory.GetCaculation(operate);
iCaculation = Factory.GetCaculationReflection(operate);
//1 转移了算法逻辑
//iResult = iCaculation.Caculation(iInputLeft, iInputLeft);
CaculationContext context = new CaculationContext(iCaculation, iInputLeft, iInputRight);
//2 转移了算法的调用逻辑
iResult = context.Action();
扩展性---抽象---反射---动态
/// <summary>
/// 不仅把对象创建给屏蔽了,而且映射关系也可以配置文件决定了
/// </summary>
/// <param name="operate"></param>
/// <returns></returns>
public static ICaculation GetCaculationReflection(string operate)
{
string key = $"ICaculation{operate}";
string dllType = ConfigurationManager.AppSettings[key];
Assembly assembly = Assembly.Load(dllType.Split(',')[1]);
Type type = assembly.GetType(dllType.Split(',')[0]);
return (ICaculation)Activator.CreateInstance(type);
}