设计模式学习09----之策略模式

举报
码农飞哥 发表于 2021/05/29 12:57:41 2021/05/29
【摘要】 概述 今天接着学习设计模式,今天要学习的模式是策略模式。PS: 最近有点懈怠了。沉迷于业务代码不能自拔,自己的学习进程被中断了,实在是不应该。闲话不多说,我们接着看看策略模式。 引子 一个比较典型的策略模式的应用场景是:商场的促销活动,不同的促销活动我们可以编写不同的算法。 定义与结构 策略模式:它定义了算法族,分别封装起来,让它们之间可以互相替换。此模式让算...

概述

今天接着学习设计模式,今天要学习的模式是策略模式。PS: 最近有点懈怠了。沉迷于业务代码不能自拔,自己的学习进程被中断了,实在是不应该。闲话不多说,我们接着看看策略模式。

引子

一个比较典型的策略模式的应用场景是:商场的促销活动,不同的促销活动我们可以编写不同的算法。

定义与结构

策略模式:它定义了算法族,分别封装起来,让它们之间可以互相替换。此模式让算法的变化,不会影响到使用算法的客户。

类图

策略模式类图
我们来看看具体的demo

Strategy抽象策略接口类

package com.strategy;

/**
 * Created by xiang.wei on 2018/4/18
 *
 * @author xiang.wei
 */
public abstract class Strategy { /** * 抽象的算法 */ public abstract void algorithmlnterface();
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

Context 上下文类

package com.strategy;

/**
 * Created by xiang.wei on 2018/4/18
 *
 * @author xiang.wei
 */
public class Context { private Strategy strategy; public Context(Strategy strategy) { this.strategy = strategy; } public void contextInterface() { strategy.algorithmlnterface(); }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

具体策略类

package com.strategy;

/**
 * Created by xiang.wei on 2018/4/18
 *
 * @author xiang.wei
 */
public class ConcreteStrategyA extends Strategy { public void algorithmlnterface() { System.out.println("具体策略A"); }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
 package com.strategy;

/**
 * Created by xiang.wei on 2018/4/18
 *
 * @author xiang.wei
 */
public class ConcreteStrategyB extends Strategy { public void algorithmlnterface() { System.out.println("具体策略B"); }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
package com.strategy;

/**
 * Created by xiang.wei on 2018/4/18
 *
 * @author xiang.wei
 */
public class ConcreteStrategyC extends Strategy { public void algorithmlnterface() { System.out.println("具体策略C"); }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

客户端Client类

package com.strategy;

/**
 * Created by xiang.wei on 2018/4/18
 *
 * @author xiang.wei
 */
public class Client { public static void main(String[] args) { Context contextA = new Context(new ConcreteStrategyA()); contextA.contextInterface(); Context contextB = new Context(new ConcreteStrategyB()); contextB.contextInterface(); Context contextC = new Context(new ConcreteStrategyC()); contextC.contextInterface(); }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

文章来源: feige.blog.csdn.net,作者:码农飞哥,版权归原作者所有,如需转载,请联系作者。

原文链接:feige.blog.csdn.net/article/details/79848332

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。