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

    Java模式之策略模式

        策略模式(Strategy Pattern)体现了两个非常基本的面向对象设计的原则

          1、封装变化的概念;

          2、编程中使用接口,而不是对接口的实现。

      策略模式定义了一个共同的抽象算法接口,其子类实现这个接口定义的方法,并且都有各自不同的实现,这些算法实现可以在客户端调用它们的时候互不影响的变化。   子算法之间是弱连接的关系,提高了软件的可扩展性与可重用性。

     策略模式组成

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

       2、具体策略角色:包括了相关的算法和行为,可能不止一个具体策略角色

       3、环境角色:持有一个策略类的引用,最终给客户端调用的。

    策略模式编写步骤

      1、对一组算法抽象出一个共同接口,定义这个共同接口

      2、编写策略类,实现这个借口,每个策略类都有其独特的实现

      3、编写环境角色类,类中持有一个对共同接口的引用,对策略对象注入如set方法和get方法或者用构造方法完成赋值

    例子:

    //一个算法接口

    public interface Calculate {

    //一个待实现方法

        int calculate(int a, int b);

    }

    //一个加法策略类,实现算法接口

    public class AddCalculate implements Calculate

    {

    //接口方法具体实现之加法

        public int calculate(int a, int b)

        {

            return a + b;

        }

    }

    //一个除法策略类,实现算法接口

    public class DivideCalculate implements Calculate

    {

    接口方法具体实现之除法

        public int calculate(int a, int b)

        {

            return a / b;

        }

    }

    //一个环境角色类,持有对接口的引用

    public class Environment

    {

        private Calculate cal;

        

    //构造方法对变量完成赋值

        public Environment(Calculate cal)

        {

            this.cal = cal;

        }

    //获得策略类对象

        public Calculate getCalculate()

        {

            return cal;

        }

    //用set方法注入策略对象

        public void setCalculate(Calculate cal)

        {

            this.cal = cal;

        }

    //环境角色中的接口方法,其具体结果依赖于策略引用指向的具体策略角色对象

        public int calculate(int a ,int b)

        {

            return cal.calculate(a , b);

        }

    }

    //一个客户端演示

    public class Client

    {

        public static void main(String[] args)

        {

            AddCalculate add = new AddCalculate();

            Environment environment = new Environment(add);

            System.out.println(environment.calculate(3, 4));

            DivideCalculate divide = new DivideCalculate();

            Environment environment = new Environment(divide);

            System.out.println(environment.calculate(3, 4));

        

        }

    }

  • 相关阅读:
    对数值计算numpy的一些总结,感兴趣的朋友可以看看
    mysql基础语法(部分)
    python_内建结构
    07_go语言基础
    06_go语言基础
    05_go语言基础常量
    04_go语言基础
    03_go语言基础
    02_go语言基础
    01_go语言基础
  • 原文地址:https://www.cnblogs.com/danghuijian/p/4400030.html
Copyright © 2011-2022 走看看