界定实际策略类游戏,完成了抽象化对策插口,申明对策所需要的方

lxf2023-12-16 04:40:01

文中已经参与「」

================================================================================================================

1.1、定义

策略模式(Strategy Pattern)是一种常见的程序设计模式,它重新定义了优化算法大家族,各自封装形式下去,让二者之间相互更换,此方式促使算法转变不同于应用算法手机客户端主要目的是在运行中动态性地选择算法。

策略模式的重要人物角色包含:

  1. 抽象化对策(Strategy):重新定义了一个公共接口,封装形式了实际策略类游戏中算法公共性一部分。
  2. 实际对策(Concrete Strategy):完成了抽象化对策插口,包括了具体技术实现。
  3. 自然环境(Context):拥有一个策略类游戏的引入,用以实行某一实际对策。

界定实际策略类游戏,完成了抽象化对策插口,申明对策所需要的方

1.2、实例编码

在Java中,能通过下列方法完成策略模式:

  1. 界定抽象化对策插口,申明对策所需要的方式。
  2. 界定实际策略类游戏,完成抽象化对策插口,同时提供具体技术实现。
  3. 界定环境类,拥有抽象化对策接口引入,在运行中启用对策里的优化算法。

以下是策略模式的一个简单实例编码:

    //抽象化对策插口
    public interface Strategy {
        public int calculate(int a, int b);
    }

//实际策略类游戏A
public class ConcreteStrategyA implements Strategy {
    public int calculate(int a, int b) {
        return a   b;
    }
}

//实际策略类游戏B
public class ConcreteStrategyB implements Strategy {
    public int calculate(int a, int b) {
        return a - b;
    }
}

//环境类
public class Context {
    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public void execute(int a, int b) {
        int result = strategy.calculate(a, b);
        System.out.println("Result: "   result);
    }
}

//手机客户端编码
public class Client {
    public static void main(String[] args) {
        Strategy strategyA = new ConcreteStrategyA();
        Context context = new Context(strategyA);
        context.execute(10, 5);

        Strategy strategyB = new ConcreteStrategyB();
        context = new Context(strategyB);
        context.execute(10, 5);
    }
}

在后面的例子中,抽象化对策插口 Strategy 重新定义了 calculate 方式,实际策略类游戏 ConcreteStrategyA 和 ConcreteStrategyB 各自完成了这一插口,并且提供不同类型的技术实现。环境类 Context 拥有一个对策插口引入,在运行中启用传到的思路里的优化算法。

1.3、怎样落地式

那样策略模式怎样在大家的项目中落地式呢?例如我们有一个springmvc项目,怎样把策略模式运用在工程中。

在Spring MVC工程中,可以按下列流程来简单实践活动策略模式:

  1. 界定一个插口或内部类来描述算法统一接口,并界定优化算法所需要的方式。
  2. 完成该接口实际优化算法类,在这其中完成优化算法。
  3. 在Spring MVC中,可以用@Service注释将优化算法类注册为Spring Bean。
  4. 当需要启用算法地区,应用@Autowired注释来全自动引入优化算法Bean。
  5. 怎样有好几个实现类,当需要动态性转换算法地区,应用@Qualifier注释来特定要引入的算法Bean。

比如,假定我们会有一个计算器服务项目,根据不同的操作符来计算。我们能界定一个CalculatorService接口来描述计算方式服务项目:

public interface CalculatorService {
    double calculate(double a, double b);
}

随后,我们能完成二种具体计算优化算法:

@Service
public class CalculatorServiceAImpl implements CalculatorService {
    @Override
    public double calculate(double a, double b) {
        return a   b;
    }
}

@Service
public class CalculatorServiceBImpl implements CalculatorService {
    @Override
    public double calculate(double a, double b) {
        return a - b;
    }
}

下面,当需要启用计算方式服务项目的区域,我们可以用@Autowired注释来全自动引入一个CalculatorService类别的Bean:

@Service
public class CalculationController {
    @Autowired
    private CalculatorService calculatorService;

    public double performCalculation(double a, double b) {
        return calculatorService.calculate(a, b);
    }
}

最终,必要时动态性地转换计算优化算法,我们可以用@Qualifier注释来特定要引入的算法Bean:

@Service
public class CalculationController {
    @Autowired
    @Qualifier("calculatorServiceAImpl")
    //@Qualifier("calculatorServiceBImpl")
    private CalculatorService calculatorService;
.....
    calculatorService.calculate(a, b);
}

其实就是在Spring MVC工程中实践活动策略模式的一种实际方法。

最终

怎样这篇文章对你产生帮助,别忘记加个关注,给我点个赞!!!

文中已经参与「」

本站是一个以CSS、JavaScript、Vue、HTML为中心的前端开发技术网址。我们的使命是为众多前端工程师者提供全方位、全方位、好用的前端工程师专业知识和技术服务。 在网站上,大家可以学到最新前端开发技术,掌握前端工程师最新发布的趋势和良好实践。大家提供大量实例教程和实例,让大家可以快速上手前端工程师的关键技术和程序。 本站还提供了一系列好用的工具软件,帮助你更高效地开展前端工程师工作中。公司提供的一种手段和软件都要经过精心策划和改进,能够帮助你节约时间精力,提高研发效率。 此外,本站还拥有一个有活力的小区,你可以在社区里与其它前端工程师者沟通交流技术性、交流经验、处理问题。我们坚信,街道的能量能够帮助你能够更好地进步与成长。 在网站上,大家可以寻找你需要的一切前端工程师网络资源,使您成为一名更加出色的网页开发者。欢迎你添加我们的大家庭,一起探索前端工程师的无限潜能!