java设计模式-策略模式

策略模式 是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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值