zoukankan      html  css  js  c++  java
  • 一天学一个模式_第一天:策略模式

    概念:
      策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
         (原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable.
    Strategy lets the algorithm vary independently from clients that use it.)

    抽象策略角色:
           策略类,通常由一个接口或者抽象类实现。

    步骤:
         (①②步比较菜,忽略。有异议者联系!)
          ①首先定义一个策略接口
          ②然后再写出你需要的实现类(这里称为“计谋”)去继承①策略接口。
          ③计谋有了,那还要有锦囊装

           /**
            * @author wonter 
            * <b>描述:</b>计谋有了,那还要有锦囊装 <br>
            * <b>邮件:</b> yiyu1@163.com <br>
            */
           public class Box {
         //①策略接口
         private IStrategy straegy;
         //向锦囊中传入计谋
         //这里类型是策略IStrategy接口,但传入的则是“实现”接口的计谋。
         public Box(IStrategy jimou){
         //改写策略
              this.straegy = jimou;
          }
         //使用计谋
         public void operate(){
              this.straegy.operate();
          }
           }

              ④使用计谋

       /**
        * @author wonter 
        * <b>描述:</b>计谋有了,那还要有锦囊装 <br>
        * <b>邮件:</b> yiyu1@163.com <br>
        */
          public class YunZhao {
        public static void main(String[] args) {
         //将锦囊声明出来
         Context context;
         System.out.println("—— 锦囊妙计一 ——");
         //向锦囊拿出**计谋
         context = new Context(new first());
          //执行计谋
         context.operate(); 
         System.out.println("—— 锦囊妙计二 ——");
         //向锦囊拿出**计谋
         context = new Context(new second());
          //执行计谋
         context.operate(); 
         System.out.println("—— 以下待为扩展 ——");
         System.out.println("——        ... ....       ——");
          }
    好处:
           这就是策略模式,高内聚低耦合的特点也表现出来了。
           还有一个就是扩展性,也就是 OCP原则,只要修改 Context.java 就可以了。
           提供了一种替代继承的方法,而且既保持了继承的优点(代码重用)还比继承更灵活(算法独立,可以任意扩展)。
           避免程序中使用多重条件转移语句,使系统更灵活,并易于扩展。
     /**
        * @author wonter 
        * <b>描述:</b> 一天学一个模式 更新中,请关注我的博客! <br>

        * <b>博客:</b> http://www.cnblogs.com/Javame <br>
        * <b>邮件:</b> yiyu1@163.com <br>
        */

  • 相关阅读:
    Arcgis地理处理工具案例教程——批量提取多个栅格的范围边界矢量
    win10 windows10自动修复系统
    ArcGIS案例教程—E00格式批量导入成要素类
    Python正则表达式多行匹配问题
    学习ArcGIS开发的途径有哪些
    Arcgis空间分析案例教程——计算空间分布范围
    ArcGIS地理建模批处理教程——批量添加文件名作为字段值
    ArcGIS地理建模批处理教程——批量去除Z值和M值
    华为NM存储卡与Micro SD存储卡对比分析
    EDT
  • 原文地址:https://www.cnblogs.com/Javame/p/2153496.html
Copyright © 2011-2022 走看看