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));

    

    }

}

原文地址:https://www.cnblogs.com/danghuijian/p/4400030.html