• 十一个行为模式之策略模式(Strategy Pattern)


    定义:
    定义一系列的算法,将每一个算法封装起来,并使它们之间可以相互替换,让算法具有可扩展性和对立性。

    结构图:

    • Context:环境类,算法的使用者。对外提供了算法使用的接口,并且持有一个抽象算法类的引用。当实际使用算法时,调用抽象算法类的接口,转发实际的算法调用。并且提供方法,让客户选择和设置内部的算法。
    • Strategy:抽象策略类,定义了所有算法的统一接口,当有新的算法添加时可以采用继承或实现的方式来添加新的子类。
    • ConcreteStrategy:具体算法子类,实现了抽象策略类中声明的算法,执行具体的算法业务。

    Java SE 中的策略模式

    在Java SE开发中,用户需要对容器对象Container中的成员对象如按钮、文本框等GUI控件进行布局(Layout),在程序运行期间由客户端动态决定一个Container对象如何布局,Java语言在JDK中提供了几种不同的布局方式,封装在不同的类中,如BorderLayout、FlowLayout、GridLayout、GridBagLayout和CardLayout等。Container类充当环境角色Context,而LayoutManager作为所有布局类的公共父类扮演了抽象策略角色,它给出所有具体布局类所需的接口,而具体策略类是LayoutManager的子类,也就是各种具体的布局类,它们封装了不同的布局方式。

    优点:

    • 支持开闭原则,对算法的修改和算法添加都十分方便,具有较强的可扩展性。
    • 可以将抽象的代码移到抽象类当中,避免代码的重复。
    • 算法可以进行复用,将单独的算法抽取出来,使得不同的环境类可以方便地复用这些策略。

    缺点:

    • 客户端必须知道所有的策略类,并决定使用哪一个策略。
    • 无法再客户端使用多了策略,一次只能使用一个策略,不支持使用一个策略类完成部分功能后再使用另一个策略。

    实例:

    StrategyPattern.java

  • 相关阅读:
    SpringMvc框架总结
    Spring框架总结
    Redis常用数据类型
    从配置文件中获取list,set,map值
    Oracle数据库编码格式不同造成乱码
    事务
    Spring-动态代理
    关于Maven项目pom.xml文件不报错却有红叉的问题
    Spring—SSJ集成&声明式事务管理
    Spring-构造注入&注解注入&代理模式&AOP
  • 原文地址:https://www.cnblogs.com/zhangfei614/p/6104748.html
Copyright © 2020-2023  润新知