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

    策略模式

    1)基本定义

    一个类的行为或器算法可以在运行时更改,为一种行为模式。
    意图:定义一系列算法,把他们封装起来,并且使他们可以相互替换。
    解决问题:在有多种算法相似的情况下,使用if...else所带来的复杂和难以维护
    使用场景:一个系统有多个类,而区分他们的只是他们直接的行为
    如何解决:场景表示各自策略的对象和一个行为随着策略对象改变而改变的context对象,策略对象改变context对象的指向算法。
    关键代码:实现同一个接口

    类图:

     

    2.demo代码:

    策略接口:

    public interface Strategy {
        public int doOperation(int num1,int num2);
    }

    策略接口实现类:

    public class StrategyAdd implements Strategy{
        @Override
        public int doOperation(int num1, int num2) {
            return num1 + num2;
        }
    }
    
    public class StrategyMultiply implements Strategy{
        @Override
        public int doOperation(int num1, int num2) {
            return num1 * num2;
        }
    }

    策略Context:

    public class StrategyContex {
        Strategy strategy;
        public StrategyContex(Strategy strategy) {
            this.strategy = strategy;
        }
        public void setStrategy(Strategy strategy) {
            this.strategy = strategy;
        }
        public int executeStrategy(int num1,int num2) {
            return strategy.doOperation(num1, num2);
        }
    }

    调用demo:

    public class StrategyDemo {
        public static void main(String[] args) {
            int num1 = 2,num2 = 3;
            StrategyContex contextAdd = new StrategyContex(new StrategyAdd());
            System.out.println(contextAdd.executeStrategy(num1, num2));
            
            StrategyContex contextMultiply = new StrategyContex(new StrategyMultiply());
            System.out.println(contextMultiply.executeStrategy(num1, num2));
            
            System.out.println("*************");
            contextMultiply.setStrategy(new StrategyAdd());
            System.out.println(contextMultiply.executeStrategy(num1, num2));
        }
    }

    调用demo输出:

  • 相关阅读:
    原码、补码、反码
    处理器体系结构
    CSAPP学习笔记—虚拟内存
    Sequence Models
    Neural Networks and Deep Learning
    windows7_下Eclipse中部署tomcat7.0进行JSP+servlet开发
    used in key specification without a key length
    在jsp页面下, 让eclipse完全支持HTML/JS/CSS智能提示
    求知若饥,虚心若愚
    C指针右左法则
  • 原文地址:https://www.cnblogs.com/ShouWangYiXin/p/10936463.html
Copyright © 2011-2022 走看看