设计模式 -- 策略模式和简单工厂实现计算器

设计模式 -- 策略模式和简单工厂的结合
#####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);
        }

GITHUB地址:https://github.com/hezudao25/StrategyPattern

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值