打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
java设计模式 策略模式(strategy pattern)

简介


oyhk学习笔记,用于记录学习的过程,还会有其他java的设计模式

第一章 策略模式(strategy pattern)

  • 描述
    • 策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
    • 在某些情况下,可以代替一大堆的if(){...}else if(){...}else{...},使代码更加优美
  • 结构图
  • 对应java代码

    • Strategy 策略接口类

      package com.pattern.startegy;/** * 定义策略接口 * @author hk * * 2012-11-27 下午12:54:29 */public interface StartegyReport {    /**     * 生成报表     */    public void createReport();}
    • Context 应用场合类

      package com.pattern.startegy;/** * 应用场合 * @author hk * * 2012-11-27 下午12:56:40 */public class Context {    private StartegyReport startegy;//策略接口    /**     * 想生成那种报表就用那个实现类     * @param startegy     */    public Context(StartegyReport startegy){        this.startegy = startegy;    }    /**     * 生成报表     */    public void createReport(){        this.startegy.createReport();    }}
    • Pie 饼图实现策略接口类

      package com.pattern.startegy;/** * 饼图报表实现类 * @author hk * * 2012-11-27 下午1:01:25 */public class Pie implements StartegyReport{    @Override    public void createReport() {        System.out.println("成功生成,饼图报表");    }}
    • Line 线性实现策略接口类

      package com.pattern.startegy;/** * 线性报表实现类 * @author hk * * 2012-11-27 下午1:01:46 */public class Line implements StartegyReport{    @Override    public void createReport() {        System.out.println("成功生成,线性报表");    }}
    • Column 柱状实现策略接口类

      package com.pattern.startegy;/** * 柱状报表实现类 * @author hk * * 2012-11-27 下午1:01:57 */public class Column implements StartegyReport{    @Override    public void createReport() {        System.out.println("成功生成,柱状报表");    }}
    • Client 客户调用类

      package com.pattern.startegy;/** * 用户想生成的报表 * @author hk * * 2012-11-27 下午1:02:22 */public class Client {    public static void main(String[] args) {        Context lineContext = new Context(new Line());//生成线性图        lineContext.createReport();        System.out.println("-------------------------------------");        Context pieContext = new Context(new Pie());//生成饼图        pieContext.createReport();        System.out.println("-------------------------------------");        Context columnContext = new Context(new Column());//生成柱状图        columnContext.createReport();    }}
  • 以上就是简单的策略模式的java代码实现,有不正之处,请原谅...为了学习记录而已,高内聚低偶合的特点

  • 优点

    • 策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了一个算法或行为族。恰当使用继承可以把公共的代码移到父类里面,从而避免代码重复。
    • 使用策略模式可以避免使用多重条件(if-else)语句。多重条件语句不易维护,它把采取哪一种算法或采取哪一种行为的逻辑与算法或行为的逻辑混合在一起,统统列在一个多重条件语句里面,比使用继承的办法还要原始和落后。
  • 缺点

    • 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道算法或行为的情况。
    • 由于策略模式把每个具体的策略实现都单独封装成为类,如果备选的策略很多的话,那么对象的数目就会很可观。
  • 最后运行结果

    成功生成,线性报表-------------------------------------成功生成,饼图报表-------------------------------------成功生成,柱状报表
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
JAVA设计模式之策略模式 - Strategy
设计模式之策略模式和状态模式(strategy pattern & state pattern)
设计模式系列19:策略模式(Stragety Pattern)
策略模式(Strategy Pattern)
strategy模式和bridge模式的区别
策略模式(Strategy)解析例子
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服