zoukankan      html  css  js  c++  java
  • 策略模式

    定义:    

        在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。

        在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

        策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换,让算法独立于使用它的客户而独立变化。

    介绍:

        意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。

        主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。

        何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。

        如何解决:将这些算法封装成一个一个的类,任意地替换。 关键代码:实现同一个接口。

        应用实例:

          1、诸葛亮的锦囊妙计,每一个锦囊就是一个策略。

          2、旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。

     实现思路

    定义一个Strategy接口如下

    public interface Strategy {
        
        public int doOperation(int i,int y);
    
    }

    为该接口创建三个实现类

    //
    public class OperationAdd implements Strategy{
    
        @Override
        public int doOperation(int i, int y) {
            // TODO Auto-generated method stub
            return i+y;
        }
    
    }
    //
    public class OperationSubstract implements Strategy{
    
        @Override
        public int doOperation(int i, int y) {
            // TODO Auto-generated method stub
            return i-y;
        }
    
    }
    //
    public class OperationMultiply implements Strategy{
    
        @Override
        public int doOperation(int i, int y) {
            // TODO Auto-generated method stub
            return i*y;
        }
    
    }

    创建一个Context类

    public class Context {
        private Strategy strategy;
        
        public Context(Strategy str){
            this.strategy=str;
        }
        
        public int executeStrategy(int i,int y){
            return strategy.doOperation(i, y);
        }
    
    }

    测试类

    public class StrategyPatternDemo {
    
        public static void main(String[] args) {
            
            Context con1=new Context(new OperationAdd());
            System.out.println("10 + 5 = "+con1.executeStrategy(10, 5));
            
            
            Context con2=new Context(new OperationSubstract());
            System.out.println("10 - 5 = "+con2.executeStrategy(10,5));
            
            Context con3=new Context(new OperationMultiply());
            System.out.println("10 * 5 = "+con3.executeStrategy(10, 5));
        }
    }

    输出结果

  • 相关阅读:
    Postman使用教程
    CAD和ArcGIS转换 矢量配准
    SAP CRM Advanced search和Simple search里Max hit表现行为的差异
    SAP CRM Product simple search的启用步骤
    如何快速定位SAP CRM订单应用(Order Application)错误消息抛出的准确位置
    如何动态修改SAP CRM WebClient UI表格栏的宽度
    如何在SAP CRM WebClient UI里创建web service并使用ABAP消费
    如何处理SAP CRM Web Service错误
    如何使用SAP CRM WebClient UI实现一个类似新浪微博的字数统计器
    如何开启SAP CRM基于WORD模板创建附件的功能
  • 原文地址:https://www.cnblogs.com/xuchangqi1/p/9418466.html
Copyright © 2011-2022 走看看