策略模式的实现例子:
假设商场对一种类型的衣服打折,对于不同类型的客户,采取的打折策略是不同的,比如:新用户购买少量,不打折,新用户购买多量,打95折,这种对于不同的客户采取不同的打折策略就叫做策略模式,一下是代码的实现,供参考。
策略类
package com.imust.strategy;
/**
* 策略类
* @author Zachary (为上帝所心仪的人)
* @date 2017年9月9日
* @project shejimoshi
* @package com.imust.strategy
*/
public interface Strategy {
public double getPrice(double standardPrice);
}
新用户少量购买
package com.imust.strategy;
/**
* 新用户 少量购买
* @author Zachary (为上帝所心仪的人)
* @date 2017年9月9日
* @project shejimoshi
* @package com.imust.strategy
*/
public class NewCustomerFewStrategy implements Strategy{
@Override
public double getPrice(double standardPrice) {
System.out.println("不打折。原价");
return standardPrice;
}
}
新用户多量购买
package com.imust.strategy;
/**
* 新用户购买多量
* @author Zachary (为上帝所心仪的人)
* @date 2017年9月9日
* @project shejimoshi
* @package com.imust.strategy
*/
public class NewCustomerManyStrategy implements Strategy{
@Override
public double getPrice(double standardPrice) {
System.out.println("打九折");
return standardPrice*0.9;
}
}
老用户购买少量
package com.imust.strategy;
/**
* 老用户购买少量
* @author Zachary (为上帝所心仪的人)
* @date 2017年9月9日
* @project shejimoshi
* @package com.imust.strategy
*/
public class OldCustomerFewStrategy implements Strategy{
@Override
public double getPrice(double standardPrice) {
System.out.println("打八五折");
return standardPrice*0.85;
}
}
```、
老用户 购买多量
<div class="se-preview-section-delimiter"></div>
package com.imust.strategy;
/**
* 老用户购买多量
* @author Zachary (为上帝所心仪的人)
* @date 2017年9月9日
* @project shejimoshi
* @package com.imust.strategy
*/
public class OldCustomerManyStrategy implements Strategy{
@Override
public double getPrice(double standardPrice) {
System.out.println("打八折");
return standardPrice*0.8;
}
}
负责和具体的策略类交互
<div class="se-preview-section-delimiter"></div>
package com.imust.strategy;
/**
* 负责和具体的策略类交互
* 这样的话,具体的算法和直接的客户端调用分离了,使得算法可以独立于客户独立的变化
* @author Zachary (为上帝所心仪的人)
* @date 2017年9月9日
* @project shejimoshi
* @package com.imust.strategy
*/
public class Context {
private Strategy strategy;//当前采用的算法对象
public Context(Strategy strategy){
super();
this.strategy = strategy;
}
//可以通过set方法来注入
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public void pringPrice(double s){
System.out.println("您该报价:"+strategy.getPrice(s));
}
}
测试类
<div class="se-preview-section-delimiter"></div>
package com.imust.strategy;
/**
* 测试类
* @author Zachary (为上帝所心仪的人)
* @date 2017年9月9日
* @project shejimoshi
* @package com.imust.strategy
*/
public class Client {
public static void main(String[] args) {
Strategy s1 = new OldCustomerManyStrategy();
Context ctx = new Context(s1);
ctx.pringPrice(998);
}
}
“`