策略模式 是java的23种设计模式之一。顾名思义,策略模式就是见人说人话见鬼说鬼话的一种模式,不同的环境下可以使用不同的策略来应多,就像诸葛亮的锦囊妙计。
在多种情况可能并发的时候提供对策 我们很熟悉的一种方式是 if-else 或者switch 方法,但是这种方式耦合度太高,策略模式可以很大限度的降低耦合。
下面看一下我写的简单的demo。
第一个demo:卖货的服务员,卖一件商品的时候,如果是陌生人,卖三倍的价格;如果是朋友,卖双倍价格,如果是亲妈来了,原价卖。
先写一个策略的接口
public interface CeLve {
public void price(int price);
}
然后陌生人、朋友、亲妈都来继承这个接口
public class Stranger implements CeLve {
public void price(int price) {
System.out.println("陌生人卖给他的价格是"+price*3);
}
}
public class Friend implements CeLve {
public void price(int price) {
System.out.println("朋友买 少赚点" + price * 2);
}
}
public class Mother implements CeLve {
public void price(int price) {
System.out.println("亲妈来买,原价卖了" + price);
}
}
然后 建立一个执行者(售货员)的类
public class Waiter {
private CeLve celve;
public Waiter(CeLve celve) {
this.celve = celve;
}
public void waitercelve(int price) {
celve.price(price);
}
}
然后~开始试一试:
public class MainTest {
public static void main(String[] args) {
int price = 10;
//有人买东西了~
new Waiter(new Stranger()).waitercelve(price);
//过了段时间~
//朋友来买东西
new Waiter(new Friend()).waitercelve(price);
//又过了一段时间
//亲妈来买东西了
new Waiter(new Mother()).waitercelve(price);
}
}
---------------------------------------------------------------O---V---E---R-----------------------------------------------------------------------------------------------------------------------------------------------
再看另一个,和上面的差别不大
//抽象的策略
public interface Celve {
public void callname(String str);
public void Drink();
public void Sit();
public void kiss();
}
public class JvTiCeLve implements Celve{
public void callname(String str) {
// TODO Auto-generated method stub
System.out.println(str+"你来啦?");
}
public void Drink() {
// TODO Auto-generated method stub
System.out.println("请喝水");
}
public void Sit() {
System.out.println("请坐");
}
public void kiss() {
System.out.println("么么哒");
}
}
public class JinNang {
private Celve celve;
public JinNang(Celve celve) {
this.celve = celve;
}
public void Fathercelve(String str) {
celve.callname(str);
celve.Sit();
}
public void Sistercelvw(String str) {
celve.callname(str);
celve.Drink();
}
public void friend(String str) {
celve.callname(str);
celve.kiss();
}
}
public static void main(String[] args) {
Celve ce = new JvTiCeLve();
JinNang jinnang=new JinNang(ce);
//你爹来了~
jinnang.Fathercelve("爸爸");
//你姐来了
jinnang.Sistercelvw("姐姐");
//你基友来了
jinnang.friend("好基友");
}
源码在这:
http://download.csdn.net/detail/u010532761/9368028