学习设计模式笔记--策略模式
来源:互联网 发布:scientific linux 7.3 编辑:程序博客网 时间:2024/06/01 08:07
注: 本篇笔记内容及案例来自互联网其他博客
策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。
这个模式涉及到三个角色:
● 环境(Context)角色:持有一个Strategy的引用。
● 抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
● 具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。
使用场景
假设现在要设计一个二手车系统。本系统可能对所有的高级会员提供每辆20%的促销折扣;对中级会员提供每辆10%的促销折扣;对初级会员没有折扣。
根据描述,折扣是根据以下的几个算法中的一个进行的:
算法一:对初级会员没有折扣。
算法二:对中级会员提供10%的促销折扣。
算法三:对高级会员提供20%的促销折扣。
代码实现:
抽象策略类:
MemberStrategy.java
/** * 抽象策略 * @author * */public interface MemberStrategy { /** * 计算车的价格 * @param carPrice * @return */ public double calcPrice(double carPrice);}
具体策略类
初级会员:
PrimaryMemberStrategy.java
/** * 初级会员没有折扣 * @author * */public class PrimaryMemberStrategy implements MemberStrategy { @Override public double calcPrice(double carPrice) { return carPrice; }}
中级会员:
IntermediateMemberStrategy.java
/** * 中级会员的折扣为10% * @author * */public class IntermediateMemberStrategy implements MemberStrategy { @Override public double calcPrice(double carPrice) { return carPrice * 0.9; }}
高级会员:
AdvancedMemberStrategy.java
/** * 高级会员的折扣为20% * @author * */public class AdvancedMemberStrategy implements MemberStrategy{ @Override public double calcPrice(double carPrice) { return carPrice * 0.8; }}
价格类,需要注入抽象策略
Price.java
/** * 价格类 * @author * */public class Price { private MemberStrategy strategy; public Price(MemberStrategy strategy){ this.strategy = strategy; } /** * 计算折后价格 * @param carPrice * @return */ public double quote(double carPrice){ return strategy.calcPrice(carPrice); }}
测试类:
public class Client { public static void main(String[] args) { MemberStrategy strategy = new AdvancedMemberStrategy(); Price price = new Price(strategy); double quote = price.quote(50000); System.out.println("车辆折后价格:" + quote ); }}
输出结果:
车辆折后价格:40000.0
- 策略设计模式--学习笔记
- 设计模式学习笔记之策略模式
- 设计模式学习笔记之策略模式
- 设计模式学习笔记:策略模式
- 设计模式学习笔记--策略(Strategy)模式
- 设计模式学习笔记七:策略模式
- 设计模式学习笔记--策略模式
- 设计模式学习笔记-策略模式
- 设计模式学习笔记—策略模式
- 设计模式学习笔记之策略模式
- 设计模式学习笔记之策略模式
- 设计模式学习笔记(一):策略模式
- 大话设计模式学习笔记---策略模式
- 设计模式学习笔记之策略模式
- 设计模式学习笔记--策略模式
- [学习笔记]设计模式[0]-{策略模式}
- 设计模式学习笔记之策略模式
- 设计模式学习笔记-策略模式
- A
- 矩阵相乘
- C++中宽字符和窄字符的相互转换
- 人工智能工程师
- python 虚拟环境
- 学习设计模式笔记--策略模式
- 对象存储来势汹汹,究竟谁是“幕后推手”?
- 阶乘-LintCode
- 如何发现优秀的开源项目?
- 上海科睿副总经理魏志丽:数据可视化助力法院信息化建设
- 数据猿专访竹间智能创始人简仁贤:五分之一的岗位即将被人工智能取代
- 之前停止Oracle数据库的服务,现在打开oracle服务,连接出错ORA-01033: ORACLE initialization or shutdown in progress Process 。
- 大数据周周看:金融科技公司融360赴美IPO,小蓝单车人去楼空,用户押金退还困难
- caffe经典网络代码资料总结