• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 策略模式,java策略模式

策略模式,java策略模式

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了策略模式java,java策略模式实例,java策略设计模式,java中的策略模式,java设计模式策略模式等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

策略模式,java策略模式


public class TravelStrategy {    
    enum Strategy{    
        WALK,PLANE,SUBWAY    
    }    
    private Strategy strategy;    
    public TravelStrategy(Strategy strategy){    
        this.strategy=strategy;    
    }    

    public void travel(){    
        if(strategy==Strategy.WALK){    
            print("walk");    
        }else if(strategy==Strategy.PLANE){    
            print("plane");    
        }else if(strategy==Strategy.SUBWAY){    
            print("subway");    
        }    
    }    

    public void print(String str){    
        System.out.println("出行旅游的方式为:"+str);    
    }    

    public static void main(String[] args) {    
        TravelStrategy walk=new TravelStrategy(Strategy.WALK);    
        walk.travel();    

        TravelStrategy plane=new TravelStrategy(Strategy.PLANE);    
        plane.travel();    

        TravelStrategy subway=new TravelStrategy(Strategy.SUBWAY);    
        subway.travel();    
    }    
}

  很明显,如果需要增加出行方式就需要在增加新的else if语句,这违反了面向对象的原则之一,对修改封装(开放封闭原则)

如何用策略模式来解决这个问题?

①定义一个策略的接口:

public interface Strategy {    
    void travel();    
}

②根据不同的出行方法来实现该接口:

public class WalkStrategy implements Strategy{    

    @Override    
    public void travel() {    
        System.out.println("walk");    
    }    

}


public class PlaneStrategy implements Strategy{    

    @Override    
    public void travel() {    
        System.out.println("plane");    
    }    

}

public class SubwayStrategy implements Strategy{    

    @Override    
    public void travel() {    
        System.out.println("subway");    
    }    

}

③需要一个包装策略的类,来调用策略中的接口

public class TravelContext {    
    Strategy strategy;    

    public Strategy getStrategy() {    
        return strategy;    
    }    

    public void setStrategy(Strategy strategy) {    
        this.strategy = strategy;    
    }    

    public void travel() {    
        if (strategy != null) {    
            strategy.travel();    
        }    
    }    
}

④测试一下代码:

public class Main {    
    public static void main(String[] args) {    
        TravelContext travelContext=new TravelContext();    
        travelContext.setStrategy(new PlaneStrategy());    
        travelContext.travel();    
        travelContext.setStrategy(new WalkStrategy());    
        travelContext.travel();    
        travelContext.setStrategy(new SubwayStrategy());    
        travelContext.travel();    
    }    
}

  

android常用策略模式例子:

策略模式例子 : ListAdapter

  当更换 Adapter 的具体实现时,仍然调用的是 ListView.setAdapter(…) 方法,查看 ListView 源码,发现 setAdapter 方法的参数是一个 ListAdapter:

可以看到 ListAdapter 是一个接口,ArrayAdapter 和 BaseAdapter 是它的一个实现类

策略模式例子2 : TimeInterpolator

 

 

 

  

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 策略模式,java策略模式

相关文章

  • 2017-05-26hideSoftInputFromWindow,模拟按钮点击事件
  • 2017-05-26git+coding.net记录篇,gitcoding.net记录
  • 2017-05-26用原生VideoView进行全屏播放时的问题,videoview全屏播放
  • 2017-08-31Android中TextView、EditText对部分内容设置不同格式(颜色、字体、超链接、图片。。)
  • 2017-05-26HBase Java编程示例
  • 2017-05-26Android零散,零散钟点工
  • 2017-05-26安卓开源项目周报1227,安卓开源项目1227
  • 2017-05-26Andorid Scrolling Activity(CoordinatorLayout详情),scrollingactivity
  • 2017-08-23Glide中request的调用和管理
  • 2017-05-26Android ListView onItemClick Not Work,androidonitemclick

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • android开发游记:meterial design 5.0 新增控件介绍及使用方法
    • 安卓第五天笔记-对话框,安卓第五天笔记
    • Android设备上获取照片、裁剪图片、压缩图片
    • Loader详解,asynctaskloader详解
    • XAMARIN.ANDROID SIGNALR 实时消息接收发送示例,xamarinsignalr
    • androd 获得wifi列表,androdwifi列表
    • android:TextView实现文字走马灯效果(欺骗系统获取持久的焦点)
    • Android源码基础解析之Activity布局绘制流程
    • Vs2017 无法调试APP,Vs2017调试APP
    • 强制DataNode向NameNode上报blocks

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有