




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第深入了解Java行为型设计模式之策略模式目录策略模式应用场景优缺点主要角色策略模式的基本使用创建抽象策略角色创建具体策略角色创建上下文角色客户端执行策略模式实现支付方式的选择创建抽象策略角色创建具体策略角色创建上下文角色客户端执行
策略模式
策略模式(StrategyPattern)也叫政策模式(PolicyPattern),属于行为型模式。
它是将定义的一系列算法、分别封装起来,让它们之间可以互相替换,从而让算法的变化不会影响到使用算法的用户。
策略模式能让你定义一系列算法,并将每种算法分别放入独立的类中,以使算法的对象能够相互替换。
应用场景
1、针对同一类型问题,有多种处理方式,每一种都能独立解决问题。
2、算法需要自由切换的场景。
3、需要屏蔽算法规则的场景。
优缺点
优点:
1.可以在运行时切换对象内的算法。
2.避免使用多重条件转移语句,如if.else.语句、switch语句
3.使用策略模式可以提高算法的保密性和安全性。
4.可以将算法的实现和使用算法的代码隔离开来。
缺点:
1.客户端必须知道所有的策略,所有策略类都需要对外暴露,并且自行决定使用哪一个策略类。
2.代码中会产生非常多策略类,增加维护难度。
主要角色
1.抽象策略角色(Strategy)
规定策略或算法的行为。
2.具体策略角色(ConcreteStrategy)
具体的策略或算法实现。
3.上下文角色(Context)
用来操作策略的上下文环境,屏蔽高层模块(客户瑞)对策略,算法的直接访问,封装可能存在的变化。
策略模式的基本使用
创建抽象策略角色
publicinterfaceIStrategy{
*算法、策略
voidalgorithm();
创建具体策略角色
publicclassConcreteStrategyAimplementsIStrategy{
publicvoidalgorithm(){
System.out.println("StrategyA打9折");
publicclassConcreteStrategyBimplementsIStrategy{
publicvoidalgorithm(){
System.out.println("StrategyB打8折");
创建上下文角色
publicclassContext{
privateIStrategymStrategy;
publicContext(IStrategystrategy){
this.mStrategy=strategy;
publicvoidalgorithm(){
this.mStrategy.algorithm();
}
客户端执行
publicstaticvoidmain(String[]args){
//创建具体策略
IStrategystrategyA=newConcreteStrategyA();
IStrategystrategyB=newConcreteStrategyB();
//创建上下文环境
ContextcontextA=newContext(strategyA);
ContextcontextB=newContext(strategyB);
//客户端直接让上下文环境执行算法
contextA.algorithm();
contextB.algorithm();
StrategyA打9折
StrategyB打8折
策略模式实现支付方式的选择
创建抽象策略角色
创建支付抽象类,定义支付逻辑
publicabstractclassPayment{
*支付类型
publicabstractStringgetName();
*支付
*@paramuid用户id
*@paramamount金额
*@return支付结果
publicStringpay(Stringuid,doubleamount){
if(queryBalance(uid)amount){
return"支付失败,"+"商品金额:"+amount+",用户余额:"+queryBalance(uid);
return"支付成功,"+"商品金额:"+amount+",用户余额:"+(queryBalance(uid)-amount);
*余额查询
*@paramuid用户id
*@return余额
protectedabstractdoublequeryBalance(Stringuid);
}
创建具体策略角色
创建具体支付方式,如AliPay、WechatPay、UnionPay等三种方式。
publicclassAliPayextendsPayment{
publicStringgetName(){
return"支付宝";
protecteddoublequeryBalance(Stringuid){
return500;
publicclassWechatPayextendsPayment{
publicStringgetName(){
return"微信支付";
protecteddoublequeryBalance(Stringuid){
return600;
publicclassUnionPayextendsPayment{
publicStringgetName(){
return"银联支付";
protecteddoublequeryBalance(Stringuid){
return800;
}
创建上下文角色
创建上下文角色,
publicclassPayStrategy{
publicstaticfinalStringALI_PAY="AliPay";
publicstaticfinalStringWECHAT_PAY="WechatPay";
publicstaticfinalStringUNION_PAY="UnionPay";
publicstaticfinalStringDEFAULT_PAY=ALI_PAY;
privatestaticMapString,Paymentstrategy=newHashMapString,Payment
static{
strategy.put(ALI_PAY,newAliPay());
strategy.put(WECHAT_PAY,newWechatPay());
strategy.put(UNION_PAY,newUnionPay());
publicstaticPaymentget(StringpayKey){
if(!strategy.containsKey(payKey)){
returnstrategy.get(DEFAULT_PAY);
returnstrategy.get(payKey);
}
客户端执行
publicclassOrder{
privateStringuid;
privateStringname;
privatedoubleprice;
publicOrder(Stringuid,Stringname,doubleprice){
this.uid=uid;
=name;
this.price=price;
publicStringpay(){
returnpay(PayStrategy.DEFAULT_PAY);
publicStringpay(StringpayKey){
Paymentpayment=PayStrategy.get(payKey);
System.out.println("购买:"+name+",使用"+payment.getName()+"支付,"+"支付金额为:"+price);
returnpayment.pay(uid,price);
}
publicstaticvoidmain(String[]args){
Orderorder=newOrder("001","皮皮虾",500.5);
System.out.println(order.pay());
System.out.println("----------------------------------------------------");
System.out.println(order.pay(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年浙江嘉兴市南湖投资开发建设集团有限公司下属公司招聘14人笔试参考题库附带答案详解
- 2025山东枣庄东林农文化产业发展有限公司招聘68人笔试参考题库附带答案详解
- 纺织设计师需关注的客户需求试题及答案
- 风格变化对纺织品设计的影响试题及答案
- 工程材料转让合同协议书
- 口腔门诊投资合同协议书
- 楼房买卖合同协议书范文
- 《逆序法施工技术》课件
- 各种合同协议书
- 合同 变更 协议书
- 罪犯心理健康教育课件
- 火锅店服务员服务全流程详解
- 安徽省立医院医技及医辅人员招聘考试真题2024
- 2024-2025学年八年级下学期道德与法治期中模拟试卷(二)(统编版含答案解析)
- 测试团队协作模式-全面剖析
- 武安市公安局招聘警务辅助人员笔试真题2024
- 2023年高考真题-物理(广东卷) 含答案
- 土木工程专业外文文献及翻译
- 2024年江苏常州中考满分作文《那么旧那样新》8
- 第三单元整本书阅读《朝花夕拾》“鲁迅心中的那些情”主题交流课 教学设计 2024-2025学年统编版语文七年级上册
- 2025年驾照C1证考试科目一必考题库740题及答案(包过版)
评论
0/150
提交评论