18.策略模式

场景:
-某个市场人员接到单后的报价策略,(crm系统中常见问题).
报价策略很复杂,可以简单作如下分类:
普通用户小批量报价
普通客户大批量报价
老客户小批量报价
老客户大批量报价


-具体选用哪个报价策略,这需要根据实际情况来确定。这时候,我们采用
策略模式即可。


传统可以采用条件语句处理。
假如类型特别多,算法比较复杂,整个条件控制代码会变得很长,难以维护。


策略模式:
对应于解决某一个问题的一个算法族,允许用户从该算法族中认选一个算法族解决
某一个问题,同时可以方便的更换算法或者增加新的算法。并由客户端决定调用哪个
算法。


开发中常见的场景:

-分离算法,选择实现。





开发中常见的场景:
-javase中gui编程中,布局管理
-spring框架中,resource接口,资源访问策略

-javax.servlet.http.HttpServlet#service()


public interface Strategy {
	public double getPrice(double standardPrice);
}

/**
 * 普通客户小批量购买
 * @author Administrator
 *
 */
public class NewCustomerFewStrategy implements Strategy {

	@Override
	public double getPrice(double standardPrice) {
		System.out.println("普通客户不打折!");
		return standardPrice;
	}

}

/**
 * 普通客户大量购买
 * @author Administrator
 *
 */
public class NewCustomerManyStrategy implements Strategy {

	@Override
	public double getPrice(double standardPrice) {
		System.out.println("普通客户大批量打9折!");
		return standardPrice * 0.9;
	}

}
/**
 * 老客户小批量购买
 * @author Administrator
 *
 */
public class OldCustomerFewStrategy implements Strategy {

	@Override
	public double getPrice(double standardPrice) {
		System.out.println("老客户小批量打9折!");
		return standardPrice * 0.9;
	}

}    <pre name="code" class="java">
 

/**
 * 老客户大批量量购买
 * @author Administrator
 *
 */
public class OldCustomerManyStrategy implements Strategy {

	@Override
	public double getPrice(double standardPrice) {
		System.out.println("老客户大批量打8.5折!");
		return standardPrice * 8.5;
	}

}

/**
 * 负责和具体的策略类交互
 * 算法彻底和客户端分离了,使得算法可以独立于客户端,独立的变化
 * @author Administrator
 *
 */
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 printPrice(double standardPrice) {
		System.out.println("报价:" + strategy.getPrice(standardPrice));
	}
}

public class Client {
	public static void main(String[] args) {
		Strategy s = new OldCustomerManyStrategy();
		Context c = new Context(s);
		c.printPrice(1000.0);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是常见的Java设计模式: 1. 工厂模式(Factory Pattern) 2. 单例模式(Singleton Pattern) 3. 建造者模式(Builder Pattern) 4. 原型模式(Prototype Pattern) 5. 适配器模式(Adapter Pattern) 6. 桥接模式(Bridge Pattern) 7. 组合模式(Composite Pattern) 8. 装饰器模式(Decorator Pattern) 9. 外观模式(Facade Pattern) 10. 享元模式(Flyweight Pattern) 11. 代理模式(Proxy Pattern) 12. 观察者模式(Observer Pattern) 13. 介者模式(Mediator Pattern) 14. 命令模式(Command Pattern) 15. 访问者模式(Visitor Pattern) 16. 解释器模式(Interpreter Pattern) 17. 迭代器模式(Iterator Pattern) 18. 策略模式(Strategy Pattern) 19. 模板方法模式(Template Method Pattern) 20. 职责链模式(Chain of Responsibility Pattern) 21. State 模式(状态模式) 22. Memento 模式(备忘录模式) 23. Builder 模式(建造者模式) 24. Composite 模式(组合模式) 25. Command 模式(命令模式) 26. Adapter 模式(适配器模式) 27. Proxy 模式(代理模式) 28. Bridge 模式(桥接模式) 29. Decorator 模式(装饰器模式) 30. Facade 模式(外观模式) 31. Flyweight 模式(享元模式) 32. Interpreter 模式(解释器模式) 33. Iterator 模式(迭代器模式) 34. Mediator 模式(介者模式) 35. Memento 模式(备忘录模式) 36. Observer 模式(观察者模式) 37. Prototype 模式(原型模式) 38. Singleton 模式(单例模式) 39. Strategy 模式(策略模式) 40. Template Method 模式(模板方法模式) 41. Visitor 模式(访问者模式)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值