• 策略模式【java版】


    一、基本结构

        组成:

             a)策略接口:1个
             b)具体策略类:多个,封装了具体的算法和行为
             c)调度类:  1个,持有某具体策略类的引用,供客户端使用

       策略接口:

    //策略接口,定义了不同策略供外部调用的“通用方法”
    public interface StrategyInterface {

    public void multiWay_tour();
    }

       具体策略类一:

    public class FirstConcreteStrategy implements StrategyInterface {

    public void multiWay_tour() {//策略方法的具体实现

    System.out.println("I'll go tourism on feet!");
    }

    }

       具体策略类二:

    public class SecondConcreteStrategy implements StrategyInterface {

    public void multiWay_tour() {//策略方法的具体实现

    System.out.println("I'll go tourism by train!");
    }

    }

       调度类:

    public class Context {

    private StrategyInterface strategyInterface;

    //调度类,根据传进来的具体策略对象的引用,调用其对应的方法
    public Context(StrategyInterface strategyInterface) {

    this.strategyInterface=strategyInterface;
    }

    public void multiWay_tour(){

    this.strategyInterface.multiWay_tour();
    }

    }

       说明: 如何体现“对扩展开放,对修改封闭”?

             当有新的具体策略需要添加时,只需要定义一个新的“具体策略类”,整个结构中,无需做任何修改


    二、测试

       测试代码:

    public class Main {

    public static void main(String[] args) {
    System.out.println("开始测试策略模式。。。");

    //定义多个调度类对象
    Context firstContext=new Context(new FirstConcreteStrategy());
    Context secondContext=new Context(new SecondConcreteStrategy());

    //调用“通用方法”,只通过“调度类”实现,算法之间的差异已被屏蔽
    firstContext.multiWay_tour();
    secondContext.multiWay_tour();
    }

    }

       运行结果:

    三、策略模式与简单工厂模式对比:

       简单工厂模式:根据不同的情况,创建不同的对象,对象之间类型差别较大,

             有可能各个类的方法名和个数差别很大

                             注重不同对象的创建:根据不同的情况创建不同的对象(eg:下单,查资金等)

       策略模式根据不同的情况,创建不同的对象.对象不同类型相近,方法差别大. 尤其适合经

             常变动的多种不同算法。 一般用于多个类的方法名都相同,但是实现方式不同

                             注重多个对象的相同行为屏蔽方法名相同,算法实现细节不同之间的差异

                                      (eg:txt、xml、dat、access四种格式的数据操作,读取,删除,修改) 

        

  • 相关阅读:
    自执行匿名函数
    jQuery Ajax 实例 ($.ajax、$.post、$.get)
    iframe的滚动条问题:显示/隐藏滚动条
    选择器的整理
    html标记
    Axure RP
    苹果官方人机交互指南中明确定义了应用中需要包括的图标和启动画面图片
    tableview_nav 动画效果
    WebView加载HTML图片大小自适应与文章自动换行
    iOS App创建桌面快捷方式
  • 原文地址:https://www.cnblogs.com/edisonfeng/p/2301074.html
Copyright © 2020-2023  润新知