策略模式是设计模式中比较简单的一种模式,主要是针对某一特定问题有多种手段达成目标的情况的,比如一个人回家可以坐公交、骑自行车、走路等,而这种模式的要点在于,策略要抽象出接口,并把抽象策略注入到具体操作者中,从而完成手段和目标的解耦分离。
策略模式类图:
[img]http://dl.iteye.com/upload/attachment/364924/0291e346-9c1b-3e85-b247-198b0fb57da1.jpg[/img]
具体代码示例:
行为主体
测试类:
说明:状态模式和策略模式是非常相似的设计模式。有时候甚至会发现,换一个思考方式之后,原来采用状态模式的地方可以用策略模式来代替;或者是原来用策略模式的地方可以用状态模式来代替。比如:商场优惠活动可以采用这种策略,1 打折,2 买一赠一,3满XXX减xx.这样的话就是采用策略模式了。 当把优惠活动当做一种抽象状态时,存在这样3种状态,1 打折状态,2 捆绑买一赠一状态,3 满XX减xx状态。这样的话就会是一种状态模式。 通过这段话我想告诉大家,其实设计模式只是JAVA前人的经验总结抽象,通过这个总结只是想让我们后来人明白 抽象 封装 解耦 复用 健壮等最基本的一些特性。没有银弹,只有适合自己系统的,满足既定要求的就是最好的模式。
策略模式类图:
[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前人的经验总结抽象,通过这个总结只是想让我们后来人明白 抽象 封装 解耦 复用 健壮等最基本的一些特性。没有银弹,只有适合自己系统的,满足既定要求的就是最好的模式。