菜鸟硕枫设计模式系列之22 策略模式

本文介绍策略模式的基本概念及其应用场景,通过示例代码展示了如何实现策略模式,以解决同一问题的不同处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

策略模式是设计模式中比较简单的一种模式,主要是针对某一特定问题有多种手段达成目标的情况的,比如一个人回家可以坐公交、骑自行车、走路等,而这种模式的要点在于,策略要抽象出接口,并把抽象策略注入到具体操作者中,从而完成手段和目标的解耦分离。

策略模式类图:
[img]http://dl.iteye.com/upload/attachment/364924/0291e346-9c1b-3e85-b247-198b0fb57da1.jpg[/img]


具体代码示例:


package strategyPattern;

public interface Strategy {

void goHome();
}



package strategyPattern;

public class ConcreteStrategy1 implements Strategy{

public void goHome() {
System.out.println("Go home by bus");
}

}



package strategyPattern;

public class ConcreteStrategy2 implements Strategy{

public void goHome() {
System.out.println("Go home On foot");
}

}



package strategyPattern;

public class ConcreteStrategy3 implements Strategy{

public void goHome() {
System.out.println("goes home by bike");
}

}


行为主体

package strategyPattern;

public class Man {

private String name;
private Strategy strategy;

public Man(Strategy strategy,String name){
this.strategy = strategy;
this.name = name;
}
public void goHome(){
System.out.print(name+" ");
strategy.goHome();
}

}


测试类:


package strategyPattern;

public class StrategyTest {

public static void main(String[] args){
Strategy strategy = new ConcreteStrategy1();
Man man1 = new Man(strategy,"lxy");
man1.goHome();

strategy = new ConcreteStrategy2();
Man man2 = new Man(strategy,"shuofenglxy");
man2.goHome();

strategy = new ConcreteStrategy3();
Man man3 = new Man(strategy,"shuofeng");
man3.goHome();
}

}


说明:状态模式和策略模式是非常相似的设计模式。有时候甚至会发现,换一个思考方式之后,原来采用状态模式的地方可以用策略模式来代替;或者是原来用策略模式的地方可以用状态模式来代替。比如:商场优惠活动可以采用这种策略,1 打折,2 买一赠一,3满XXX减xx.这样的话就是采用策略模式了。 当把优惠活动当做一种抽象状态时,存在这样3种状态,1 打折状态,2 捆绑买一赠一状态,3 满XX减xx状态。这样的话就会是一种状态模式。 通过这段话我想告诉大家,其实设计模式只是JAVA前人的经验总结抽象,通过这个总结只是想让我们后来人明白 抽象 封装 解耦 复用 健壮等最基本的一些特性。没有银弹,只有适合自己系统的,满足既定要求的就是最好的模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值