大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
Java的策略模式中体现了两个非常基本面向对象的原则
-封装变化的概念
-编程中使用接口,而不是对接口的实现
策略模式的定义
定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。
策略模式使这些算法在客户端调用它们的时候能够互不影响的变化
策略模式的组成
抽象策略角色–策略类,通常由一个接口或者抽象类实现
具体策略角色–包装了相关算法和行为
环境角色–持有一个策略类的引用,最终给客户端调用的
策略模式的编写步骤
1、对策略对象定义一个公共的接口
2、编写策略类,该类实现上面的接口
3、在使用策略对象的类中保存一个对策略对象的引用
4、在使用策略对象的类中,实现策略对象的set和get方法或者使用构造方法赋值
例子
//策略类,定义一个抽象的算法,实现计算功能
public interface Strategy {
public int calcultate(int x,int y);
}
//具体策略角色,加法角色,实现加法功能
public class AddStrategy implements Strategy{
public int calcultate(int x, int y) {
return x+y;
}
}
//具体策略角色,减法角色,实现减法功能
public class SubtractStrategy implements Strategy{
public int calcultate(int x, int y) {
return x-y;
}
}
//环境角色
public class Environment {
private Strategy strategy;
public Environment(Strategy strategy){
this.strategy=strategy;
}
public void setStrategy(Strategy strategy){
this.strategy=strategy;
}
public int calcultate(int x,int y){
return strategy.calcultate(x, y);
}
}
//客户端
public class Client {
public static void main(String[] args) {
AddStrategy addStrategy=new AddStrategy();
Environment environment=new Environment(addStrategy);
System.out.println(environment.calcultate(3, 4));
SubtractStrategy subtractStrategy=new SubtractStrategy();
environment=new Environment(subtractStrategy);
System.out.println(environment.calcultate(3, 4));
}
}
策略模式有什么好处?
策略模式的好处在于你可以动态的改变对象的行为。
缺点:
客户端必须知道所有的策略类,并自行决定使用哪一个策略类
造成很多策略类,用工厂模式解决
作业:
public class Person {
private int id;
private int age;
private String name;
}
要求:假如有若干个Person对象存在一个List当中,对它们进行排序,分别按照id、age、name进行排序(正常的倒序、升序),假如年龄或者姓名重复,则按照id排序
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/197240.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...