JAVA全系列 教程
3762个小节阅读:7092.3k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
策略(Strategy)设计模式,是23种设计模式(Gang of Four,GoF ,四人组)中一种。
策略设计模式有一系列相对独立的解决方案,用户根据不同情况进行选择,这种情况就可以使用策略模式。再具体点说就是有一个公共接口,再有一些列实现类,这些类封装了不同算法,根据不同的场景,选择这些不同的算法。
具体举例说明:编程中不同学科有着不同的学习路线,当我们选择学习Java时,应该按照以java学习路线学习。学习前端时,按照前端的学习路径学习。我们就以这个现实场景来讲解策略模式。
如果不使用策略模式,也可以写出来代码,这个时候应该用if...else if ...else 结构
xxxxxxxxxx
String study="java";
if(study.equals("java")){
System.out.println("java应该先学。。。");
}else if(study.equals("frontend")){
System.out.println("前端应该先学。。。");
}
这段代码是不复习面向对象设计原则-开闭原则(OCP,对修改关闭,对扩展开放),当我们还有其他学科的学习路线时,需要修改代码,继续添加else if。在这种场景下就可以使用策略模式。
我们先来学习下策略模式包含哪些内容。在策略设计模式中,一般包含三个角色和一个使用者:
策略模式代码实现。
xxxxxxxxxx
// 策略抽象,定义所有学科学习方法
public interface ITStrategy {
void study();
}
// 具体策略:Java学习方法
public class JavaStrategy implements ITStrategy{
@Override
public void study() {
System.out.println("Java应该先学。。。");
}
}
// 具体策略:前端学习方法
public class FrontendStrategy implements ITStrategy{
@Override
public void study() {
System.out.println("前端应该先学。。。");
}
}
// 环境:关联策略抽象
public class ITContext {
private ITStrategy itStrategy;
public ITContext() {
}
// 有参构造,传入具体策略
public ITContext(ITStrategy itStrategy) {
this.itStrategy = itStrategy;
}
// 对外提供方法,执行策略
public void study(){
itStrategy.study();
}
}
// 客户:使用环境
public class Test {
public static void main(String[] args) {
ITContext itContext = new ITContext(new JavaStrategy());
itContext.study();
ITContext itContext2 = new ITContext(new FrontendStrategy());
itContext2.study();
}
}
通过上面的代码可以看出来,我们后面添加Python的学习方法对代码没有影响,和Java、前端的学习方法都是相互独立的。
所以我们来总结下,策略模式的优缺点:
优点:
缺点: