zoukankan      html  css  js  c++  java
  • 十一个行为模式之策略模式(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

  • 相关阅读:
    全国计算机等级考试二级教程-C语言程序设计_第10章_字符串
    网易云课堂_程序设计入门-C语言_第六章:数组_2鞍点
    arcgis api for silverlight开发系列之二:缓存图层与动态图层及图层总结 .
    VS2010程序打包操作(超详细的)
    地图三要素
    创业建议
    写代码时,必须注意“异常处理”
    WPF——RenderTransform特效
    MVVM特点、源(数据)与目标(如:控件等)的映射
    使用触发器定义 WPF 控件的行为
  • 原文地址:https://www.cnblogs.com/zhangfei614/p/6104748.html
Copyright © 2011-2022 走看看