java 策略设计模式_Java设计模式:策略模式

策略模式,顾名思义,我是没看懂。

不知道为什么称它为策略模式,但通过学习,我知道这种模式可以让我的代码分工明确,实现了操作和使用者的解耦。

策略模式共分三个部分:

1.你的操作方法的接口,定义了一个实现的方法

2.你的操作方法的具体实现

3.环境类,用来对具体的操作方法进行设置,比如执行等

举个栗子🌰!

需求:我有三个算法,分别可以解决三个问题,那么我得看看问题是什么来选用不同的方法。

解决方法1:

int questionID = 1; //假设问题是第一个,id为1

if(questionID == 1)

{

fun1();

} else if(questionID == 2)

{

fun2();

}else if(questionID == 3)

{

fun3();

}

以上就是对问题编号先进行判断,通过if语句来找到对应的实现方法。完美!

不好的一点就是,如果算法特别多,再修改就会乱七八糟的,既要修改方法,又要在if语句这里进行修改,多到一定程度,我就爆炸了!BOOM!

所以,我愿意牺牲一点时间,把方法和使用分离开,这里就可以用到策略模式。

我们先写一个大接口!

interface Strategy {

void operate();

}

定义了一个operate()方法,实现这个接口的也要实现这个方法,这是我们定的规则。

再写三个复杂的算法!

class Algorithm1 implements Strategy {

@Override

public void operate() {

System.out.println("algorithm1");

}

}

class Algorithm2 implementsStrategy {

@Override

public void operate() {

System.out.println("algorithm2");

}

}

class Algorithm3 implementsStrategy {

@Override

public void operate() {

System.out.println("algorithm3");

}

}

这三个算法都实现了那个大接口。

最后写一个封装类Context:

class Context {

Strategy strategy;

public Context(Strategy strategy) {

this.strategy= strategy;

}

public void operate(){

strategy.operate();

}

}

封装类的意义就是可以对Strategy进行操作,有时候是可以去掉的。

调用方法:

Context context =newContext(new Algorithm1());

context.operate();

这样就把方法解耦出来,形成一个实现Strategy的单独的类了,我们增添删改算法的时候,就会清晰很多,但是if还是要写的!(我去,这不还是很乱么!)策略模式只是做解耦,并不能把判断语句都取代了呀。如果你想让判断语句好看,你可以用switch,用反射辣。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值