• 设计模式之策略


    策略模式介绍

    策略模式是一种行为设计模式,它能让你定义一系列算法,并将每种算法分别放入独立的类中,以使算法的对象能够相互替换。

    每个独立的高尔夫球杆对象

    策略模式建议找出负责用许多不同方式完成特定任务的类,然后将其中的算法抽取到一组被称为策略的独立类中。

    它将一组行为转换为对象,并使其在原始上下文对象内部能够相互替换,原始对象就叫做上下文,它包含指向策略对象的引用并将执行行为分派给策略对象。为了改变上下文完成其工作的方式,其他对象可以使用另一个对象来替代当前链接的策略对象。

    它会有一个上下文类来关联策略,通过一个成员变量存储对于每种策略的引用,它只负责将工作委派给已连接的策略对象。其中客户端在使用时会将具体的策略传递过来,此类不需要了解策略,它只需要通过同样的通用接口与所有策略进行交互就可以。

    策略模式结构

    • 1、上下文

    其维护指向具体策略的引用,且仅通过策略接口与该对象进行交流。

    • 2、策略接口

    所有具体策略的通用接口,它声明一个上下文用于执行策略的方法。

    • 3、具体策略

    实现上下文所用算法的不同策略。当上下文需要运行算法时,它会在其已连接的策略对象上调用执行方法。(上下文不了解策略,不关心自己调用了那个策略。)

    • 4、客户端

    会创建一个特定策略对象并将其传递给上下文。上下文会通过某个方法,来使客户端在运行时替换相关联的策略。

    适合应用场景

    1、当想使用对象中不同的算法变体,且希望在运行时切换算法时。

    2、当有许多仅在指向某些行为时略有不同相似类时。

    3、若算法在上下文逻辑中不重要,使用该模式可以将类的业务逻辑与其算法实现细节隔离开来。

    实现方式

    • 1、在上下文类中找到变动频率最高的算法,声明该算法所有变体的通用策略接口。
    • 2、在各自的类中逐一实现算法(必须实现策略接口)。
    • 3、在上下文类中通过成员变量来存储策略对象(上下文只能通过策略接口同策略对象进行交互)。
    • 4、客户端需要将上下文类和策略进行关联。

    满足开闭原则;可以使用组合来代替继承;可将算法的实现与使用算法的代码隔离开;可在运行时切换对象内的算法。

    装饰模式可让你更改对象的外表,策略则让你能够修改其本质。

    Demo

    策略接口和实现策略的类

    策略接口和实现策略的类

    上下文类

    上下文类

    业务逻辑和显示结果

    业务逻辑和显示结果

    可以从上面的显示结果中可以看到,当在Main方法中,通过上下文类context来调用策略实现类时,可以得到不同的显示结果。这样我们在实际的业务开发中就可以根据实际情况按需进行使用,可以达到将算法和实际业务剥离的效果,减少彼此之间的耦合。而且也满足开闭原则,我们在后期添加新算法时,可以不用修改旧算法,就可以实现功能。

    小寄语

    人生短暂,我不想去追求自己看不见的,我只想抓住我能看的见的。

    原创不易,给个关注。

    我是阿辉,感谢您的阅读,如果对你有帮助,麻烦点赞、转发 谢谢。

    作者:阿辉
    关注我:微信扫描下面二维码,关注后6T编程资料免费送。
    微信公众号:Andy阿辉
    写一些程序员的所思所想,希望对你有帮助。

    版权声明:本文版权归作者和博客园共有,欢迎转载,
    但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之验证码
    ABP前端使用阿里云angular2 UI框架NG-ZORRO分享
    ASP.NET Core之跨平台的实时性能监控(2.健康检查)
    应用程序的8个关键性能指标以及测量方法
    ASP.NET Core之跨平台的实时性能监控
    浅析Entity Framework Core2.0的日志记录与动态查询条件
    开发短网址平台的思路
    Nginx解决错误413 Request Entity Too Large
    配置Nginx实现负载均衡
    Windows下Nginx的安装及使用方法入门
  • 原文地址:https://www.cnblogs.com/netxiaohui/p/15179704.html
Copyright © 2020-2023  润新知