企业网站现状,个人网页设计过程展示,青岛seo招聘,织梦 xml网站地图策略者模式简介策略者模式定义一个算法接口#xff0c;并由其实现类去实现#xff0c;使得每一个算法都得到封装#xff0c;并让他们可以相互替换。这是一种行为型模式。策略者模式降低了算法行为和环境角色的耦合度#xff0c;使得算法可以独立发生变化。策略者模式在现实… 策略者模式简介策略者模式定义一个算法接口并由其实现类去实现使得每一个算法都得到封装并让他们可以相互替换。这是一种行为型模式。策略者模式降低了算法行为和环境角色的耦合度使得算法可以独立发生变化。策略者模式在现实世界的使用很多比如互金场景中的优惠券模式可以分为本金券返现券加息券增收券等每种卡券给予用户享受不同的权益如果有一天增加了新的优惠券也很容易扩展进去。由此可见策略者模式使得业务线索更加清晰明了每种业务线索场景彼此互不关联互不影响。同时由于并不强耦合企业业务所以当有一天企业业务扩大并同时需要对卡券进行进一步的权益扩展的时候修改起来也会很方便当然某些可变数据是可以通过配置来解决的这也进一步减少了代码的修改。当然我们也可以看到根据特定的场景充分运用其规则并通过配合一些常规手段来进一步完善和稳定系统功能的时候可以把设计模式的威力进一步发挥出来切记不可拘泥于设计模式本身。策略者模式UML类图由UML类图可知策略者模式分为三个角色Context此处负责抽象策略类调度具体的算法策略根据某些具体场景的不同Context也可以有不同的实现。Strategy抽象算法策略类所以具体策略者的父类定义了一个抽象的方法可以是接口也可以是抽象类我一般使用抽象类因为我需要对一些数据进行特殊的处理后再交给子类。ConcreteStrategy具体的算法策略具体实现抽象的方法。范例以下范例会使用前面所说的互金场景下的卡券对于用户来说就是购买产品时所使用的卡券能为自己带来多少收益所以此处把【用】这个算法抽象出来由每种卡券自己去实现响应的算法策略算法抽象类 策略算法具体的四个卡券类 策略者上线文类此处我提供了两种实现方式1、如果策略者上线文类比较简单除了对象获取以外没有其他特殊的使用可以考虑类似于简单工厂的模式毕竟我们在开发卡券功能时会提供相应的卡券类型枚举此处可以借用一下调用方式2、另外一种实现方式就是采用注入方式这种实现方式一般用于策略者上下文类功能比较多的情况调用方式策略者模式优缺点优点很好的体现了开闭原则开发者可以在不变更其他具体算法的基础上新增新的策略类即便是策略者的具体场景发生变化并需要大规模修改时也会很容易因为独立的场景总会带来特定的思维模式让开发者不会被其他场景所干扰也就是所谓的关注点分离。避免了大量的if-else算法可以自由切换缺点有可能会产生大量的策略类并且所有策略类都会对外暴露策略者模式使用场景思考其实这一块我并不想写因为写了以后会给人一种思维定势但是此处还是需要多讨论一下什么场景下去使用策略者模式我们可以做一个这样的思考当代码中或者即将编写的功能需要配合大量的if-else其中的代码会较为复杂并且这些产生if-else出现了较强的逻辑上的关联外界也根本不关注其中的具体实现在加入一层抽象层后会使得这些功能更加聚合更加明确这个时候可以考虑使用策略者模式。需要提醒的时候策略者模式关注的是对象的行为如果关注对象本身可以使用简单工厂。