【九月打卡】第17天+策略模式
2022/9/22 4:17:17
本文主要是介绍【九月打卡】第17天+策略模式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
课程名称:Java设计模式精讲 Debug方式+内存分析
课程章节:第19章 策略模式讲解+Coding+源码解析
主讲老师:Geely
课程内容:
策略模式:(相同行为,不同实现)
问题1)定义和uml图?
定义算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的用户。
应用层调用不同的不同的算法,算法你封装到不同的类中。
场景:
促销策略:满减,等
问题2)使用场景
-
系统中有很多类,区别在于他们的行为不同。使用策略模式,动态的从许多行为中,选择一个行为,一个行为一个类,一个策略。
-
一个系统中存在多个算法,选择其中一个算法,就是选择其中一个策略。
优点:
-
开闭原则,不修改原有类,仅添加类。
-
避免多重if,else语句。
-
不需要关心策略的具体实现,只需要使用这个策略就可以。
缺点:
1,客户端必须知道所有的策略类,并且自行选择使用那个策略类。
2,会多出了很多策略类。
工厂模式和策略模式的区别?
工厂模式是创建型,策略模式行为型。
工厂模式是根据要求创建对象。
策略模式是接收创建好的对象。
策略模式和状态模式区别?
策略模式的客户端,要知道到底选择哪个策略行为。
状态模式,客户端不需要知道状态,状态自动转换行为。
策略模式是对同一种行为的多种实现,一种实现就是一种策略。
状态模式关注的是根据不同状态转换行为。
问题3)策略模式实例?
这个模式涉及到三个角色:
-
抽象策略(Strategy)类:定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。
-
具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现。
-
环境(Context)类:持有一个策略类的引用,最终给客户端调用。
使用流程:策略接口,策略接口实现类,context引用策略接口,
调用入口context,传入策略实现类对象。调用具体的实现策略。
实例:
步骤 1
创建一个接口。
Strategy.java
public interface Strategy {
public int doOperation(int num1, int num2);
}
步骤 2
创建实现接口的实体类。
OperationAdd.java
public class OperationAdd implements Strategy{
@Override
public int doOperation(int num1, int num2) {
return num1 + num2;
}
}
OperationSubtract.java
public class OperationSubtract implements Strategy{
@Override
public int doOperation(int num1, int num2) {
return num1 - num2;
}
}
OperationMultiply.java
public class OperationMultiply implements Strategy{
@Override
public int doOperation(int num1, int num2) {
return num1 * num2;
}
}
步骤 3
创建 Context 类。
Context.java
public class Context {
private Strategy strategy;
public Context(Strategy strategy){
this.strategy = strategy;
}
public int executeStrategy(int num1, int num2){
return strategy.doOperation(num1, num2);
}
}
步骤 4
使用 Context 来查看当它改变策略 Strategy 时的行为变化。
StrategyPatternDemo.java
public class StrategyPatternDemo {
public static void main(String[] args) {
Context context = new Context(new OperationAdd());
System.out.println("10 + 5 = " + context.executeStrategy(10, 5));
context = new Context(new OperationSubtract()); System.out.println("10 - 5 = " + context.executeStrategy(10, 5)); context = new Context(new OperationMultiply()); System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
}
}
步骤 5
执行程序,输出结果:
10 + 5 = 15
10 - 5 = 5
10 * 5 = 50
这篇关于【九月打卡】第17天+策略模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南