博客
关于我
android 源码设计模式之--策略模式
阅读量:807 次
发布时间:2019-03-25

本文共 1733 字,大约阅读时间需要 5 分钟。

策略模式: Garrrett Python C#'ESix months ago

策略模式(Strategy Pattern)是一种软件设计模式,用于将程序的功能抽象为接口,通过不同实现类来实现具体的功能行为。这种模式的核心思想是将一次性变化的代码进行提取和封装,放置在不同的模块中,从而降低代码的耦合度,提高系统的灵活性和可扩展性。

策略模式的应用场景

策略模式通常适用于需要频繁变化行为的系统。例如,在一个需要多种交通方式选择的系统中,我们可以通过策略模式来实现不同交通工具的选择。当需要增加新的交通方式时,只需要开发对应的实现类,并在系统中选择所需的策略即可,无需修改现有代码。

策略模式的组成部分

策略模式主要由以下几个部分组成:

  • 策略界面(Strategy Interface):定义所有策略类的公共行为。通常使用抽象类或接口来定义。

  • 各种策略实现类(Concrete Strategy Classes):实现策略界面的具体功能。每个策略实现类都对应一种特定的功能行为。

  • 如何选择策略

    在实际应用中,策略的选择通常由外部配置或上下文来决定。系统可能会根据特定的输入或上下文选择合适的策略进行执行。例如,在交通选择系统中,系统会根据用户的位置和偏好,选择最优的交通工具。

    传统实现方式

    传统的实现方式通常会通过多个条件判断语句来完成功能的选择。例如,使用if-else语句或switch-case结构来根据不同的条件选择执行相应的功能。这在功能需求不断增加的情况下,代码会变得臃肿且难以维护。

    策略模式优化后的代码实现

    在使用策略模式后,我们可以将原本需要多个条件判断的逻辑结构进行优化。例如,在交通选择系统中,每个交通工具都可以独立实现一个接口,系统通过选择合适的策略来执行相应的功能。

    策略模式的示例

    下面是一个使用策略模式的示例:

    // 定义策略接口public interface JiaotongGongJu {void xuanzeJiaoTong();}

    // 各种交通方式的实现public class DiandongChe implements JiaotongGongJu {@Overridepublic void xuanzeJiaoTong() {System.out.println("电动车");}}

    public class DidiBashi implements JiaotongGongJu {@Overridepublic void xuanzeJiaoTong() {System.out.println("滴滴巴士");}}

    public class GongjiaoChe implements JiaotongGongJu {@Overridepublic void xuanzeJiaoTong() {System.out.println("公交");}}

    public class ZixingChe implements JiaotongGongJu {@Overridepublic void xuanzeJiaoTong() {System.out.println("自行车");}}

    public class Feiji implements JiaotongGongJu {@Overridepublic void xuanzeJiaoTong() {System.out.println("飞机");}}

    // 策略选择器public class Celue {public void xuanzejiongtong(JiaotongGongJu mJiaotongGongJu) {if (mJiaotongGongJu != null) {mJiaotongGongJu.xuanzeJiaoTong();}}}

    // 策略选择主程序public class CelueMain {public static void main(String[] args) {Celue celue = new Celue();celue.xuanzejiongtong(new Feiji());}}

    转载地址:http://zrguk.baihongyu.com/

    你可能感兴趣的文章
    Openlayers实战:绘制多边形,导出CSV文件
    查看>>
    Openlayers实战:绘制带箭头的线
    查看>>
    Openlayers实战:绘制点、线、圆、多边形
    查看>>
    Openlayers实战:绘制矩形,正方形,正六边形
    查看>>
    Openlayers实战:自定义放大缩小,显示zoom等级
    查看>>
    Openlayers实战:自定义版权属性信息
    查看>>
    Openlayers实战:输入WKT数据,输出GML、Polyline、GeoJSON格式数据
    查看>>
    Openlayers实战:选择feature,列表滑动,定位到相应的列表位置
    查看>>
    Openlayers实战:非4326,3857的投影
    查看>>
    Openlayers高级交互(1/20): 控制功能综合展示(版权、坐标显示、放缩、比例尺、测量等)
    查看>>
    Openlayers高级交互(10/20):绘制矩形,截取对应部分的地图并保存
    查看>>
    Openlayers高级交互(11/20):显示带箭头的线段轨迹,箭头居中
    查看>>
    Openlayers高级交互(12/20):利用高德逆地理编码,点击位置,显示坐标和地址
    查看>>
    Openlayers高级交互(13/20):选择左右两部分的地图内容,横向卷帘
    查看>>
    Openlayers高级交互(14/20):汽车移动轨迹动画(开始、暂停、结束)
    查看>>
    Openlayers高级交互(15/20):显示海量多边形,10ms加载完成
    查看>>
    Openlayers高级交互(16/20):两个多边形的交集、差集、并集处理
    查看>>
    Openlayers高级交互(17/20):通过坐标显示多边形,计算出最大幅宽
    查看>>
    Openlayers高级交互(18/20):根据feature,将图形适配到最可视化窗口
    查看>>
    Openlayers高级交互(19/20): 地图上点击某处,列表中显示对应位置
    查看>>