设计模式之GOF23策略
策略模式strategy
场景:对不同客户的不同报价策略
如果采用if else不易扩展,不符合开闭原则,可以采用策略模式
策略模式:
对应于解决某一个问题的算法族,允许其中一个算法去解决某一问题,同时可以方便的更改和扩展算法,可以由客户端决定调用那个算法
结构:抽象策略类,具体策略类(算法族),上下文类(客户端和算法类的分离),客户端类
本质:分离算法,选择实现
开发中常见的场景:
-javase中的GUI编程,布局管理
-Spring框架中,Resource接口,资源访问策略
-javax.servlet.http.HrrpServlet#service()
/**
* 策略模式
* 通过对同一接口的不同实现,形成算法族
* @author 小帆敲代码
*
*/
public interface Strategy {
double getPrice(double standardPrice);
}
class NewCustomerFewStrategy implements Strategy{
@Override
public double getPrice(double standardPrice) {
System.out.println("不打折,原价");
return standardPrice;
}
}
class NewCustomerManyStrategy implements Strategy{
@Override
public double getPrice(double standardPrice) {
System.out.println("打九折");
return standardPrice*0.9;
}
}
class OldCustomerFewStrategy implements Strategy{
@Override
public double getPrice(double standardPrice) {
System.out.println("打八五折");
return standardPrice*0.85;
}
}
class OldCustomerManyStrategy implements Strategy{
@Override
public double getPrice(double standardPrice) {
System.out.println("打八折");
return standardPrice*0.8;
}
}
/**
* 上下文类
* 确保算法和客户端的分离
* @author 小帆敲代码
*
*/
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 getPrice(double s) {
System.out.println("您的报价是"+strategy.getPrice(s));
}
}
public class Client {
public static void main(String[] args) {
Context c=new Context(new OldCustomerManyStrategy());
c.getPrice(100);
}
}
最新文章
- 自定义MVC框架
- core dump gdb调试
- 在Linux下运行C语言程序
- HTML--8Window.document对象
- OneAlert 入门(二)——事件分析
- Android SmartImageView框架的简单实用
- n%i之和
- windows下Qt Creator5.1.0编写程序以及调用OpenCV库
- chapter11_2 Lua链表与队列
- 本地修改js代码并时时生效的解决办法
- 就是要你懂Java中volatile关键字实现原理
- [笔记]使用Keepalived实现Nginx主从热备
- android仿漫画源码、抽奖转盘、Google相册、动画源码等
- 芝麻HTTP:记scikit-learn贝叶斯文本分类的坑
- 关于基因组注释文件GTF的解释
- [Android] Android Build 时报错: java.io.IOException: Could not parse XML from android/accounts/annotations.xml
- 【ABP.Net】2.多数据库支持&;&;初始化数据库
- Python接口自动化
- 第一节,windows和ubuntu下深度学习theano环境搭建
- JSP页面分页显示数据
热门文章
- Java中StringBuffer类
- python中文语料分词处理,按字或者词cut_sentence
- php时间:获取上一个月,本月天数,下一个月
- 【Django】runserver 0.0.0.0:0 后,究竟发生了什么
- IDEA 之 ERROR:无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]
- JS代码规范
- VR全景视图 Google VrPanoramaView
- 在okhttp的callback回调中加Toast出现Cant create handler inside hread that has not called Looper.prepare()...
- 翻译 - Kafka Streams 介绍(一)
- 12c DG broker DMON自动重启过程分析