zoukankan      html  css  js  c++  java
  • 用加减来简单的看策略类

    策略类的组成

    1.抽象策略角色:通常由一个接口或者策略类组成;

    2.具体的策略角色:里面封相关的算法和行为

    3.环境角色:持有一个策略类的引用,为客户端所调用


    作用:

    (自己的理解):将客户端与相关的算法分开,使其互相不干涉


    实现:

    1.要有一个抽象策略角色Strategy(Interface);

    2.要有相关具体的策略角色,来封装这些算法和行为:class AddStratety、class

    SubstarctStrategy

    3.要有环境角色:Environment


    编写:

    抽象策略角色---Strategy: 

    public interface Strategy
    {
        public int Calculate(int a, int b);
    }

    具体策略角色--AddStrategy

    public class Addstrategy implements Strategy
    {

        @Override
        public int Calculate(int a, int b)
        {
            return a + b;
        }

    }

    具体策略角色--SubstractStrategy

    public class SubstractStrategy implements Strategy
    {

        @Override
        public int Calculate(int a, int b)
        {
            return a - b;
        }

    }

    3.环境角色--Environment;

    public class Environment
    {
        
        private Strategy strategy;
        public Environment(Strategy strategy)
        {
            this.strategy = strategy;
        }
        public Strategy getStrategy()
        {
            return strategy;
        }
        public void setStrategy(Strategy strategy)
        {
            this.strategy = strategy;
        }
        public int Calculate(int a, int b)
        {
            return strategy.Calculate(a, b);
        }
    }

    客户端--Client

    public class Client
    {
        public static void main(String[] args)
        {
            Addstrategy addstrategy = new Addstrategy();
            
            Environment environment = new Environment(addstrategy);
            
            System.out.println(environment.Calculate(3, 4));
            
            SubstractStrategy substractstrategy = new SubstractStrategy();
            
            environment.setStrategy(substractstrategy);
            
            System.out.println(environment.Calculate(3, 4));
            
        }
    }

    由客户端中的程序可以看出:当写进一个策略方法的时候,程序为根据策略方法的算法来计算传进的值。避免使用繁琐的if else循环。





    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    LeetCode 242. Valid Anagram (验证变位词)
    LeetCode 205. Isomorphic Strings (同构字符串)
    LeetCode 204. Count Primes (质数的个数)
    LeetCode 202. Happy Number (快乐数字)
    LeetCode 170. Two Sum III
    LeetCode 136. Single Number (落单的数)
    LeetCode 697. Degree of an Array (数组的度)
    LeetCode 695. Max Area of Island (岛的最大区域)
    Spark中的键值对操作
    各种排序算法总结
  • 原文地址:https://www.cnblogs.com/penggy/p/4786516.html
Copyright © 2011-2022 走看看