JAVA 设计模式 策略模式

用途

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

策略模式是一种行为型模式

结构

图-策略模式结构图

Strategy : 定义所有算法的公共接口(AlgorithmInterface)。Context 使用这个接口去调用 ConcreteStrategy 定义的具体算法。

abstract class Strategy {
 public abstract void AlgorithmInterface();
 }

ConcreteStrategy : 实现 Strategy 中的算法接口(AlgorithmInterface)。

class ConcreteStrategyA extends Strategy {
     @Override
 public void AlgorithmInterface() {
         System.out.println("算法A");
     }
 }
 
 class ConcreteStrategyB extends Strategy {
     @Override
 public void AlgorithmInterface() {
         System.out.println("算法B");
     }
 }
 
 class ConcreteStrategyC extends Strategy {
     @Override
 public void AlgorithmInterface() {
         System.out.println("算法C");
     }
 }

Context : 用一个 ConcreteStrategy 来配置。维护一个对 Strategy 对象的引用。

class Context {
     Strategy strategy;
 public Context(Strategy strategy) {
 this.strategy = strategy;
     }
 
 public void ContextInterface() {
         strategy.AlgorithmInterface();
     }
 }

测试代码

public class StrategyPattern {
 public static void main(String[] args) {
         Context context1 = new Context(new ConcreteStrategyA());
         context1.ContextInterface();
 
         Context context2 = new Context(new ConcreteStrategyB());
         context2.ContextInterface();
 
         Context context3 = new Context(new ConcreteStrategyC());
         context3.ContextInterface();
     }
 }

运行结果

算法A
算法B
算法C

推荐

本文属于 JAVA设计模式系列

参考资料

《大话设计模式》《HeadFirst设计模式》

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏GreenLeaves

Oracle 多行、多列子查询

本文使用到的是oracle数据库scott方案所带的表,scott是oracle数据库自带的方案,使用前请确保其解锁 ? 一、多行子查询 多行子查询子查询是嵌入...

1767
来自专栏数据小魔方

MySQL基础入门系列之——字符与日期数据处理

今天这一篇分享MySQL中的字符串处理工具与日期时间处理,这一部分内容虽然看似不多,但是往往是输出处理中的的痛点。 我的MySQL数据库中已经建好了一个包含两列...

3359
来自专栏AILearning

Oracle部分笔记

SQL> --instr(a,b) 从a中,查找b,找到返回下标;下标从1开始,否则返回0 SQL> select instr('Hello world','l...

1726
来自专栏小白客

常用SQL语句和语法汇总

近几年数据库发挥了越来越重要的作用,这其中和大数据、数据科学的兴起有不可分割的联系。学习数据库,可以说是每个从事IT行业的必修课。你学或不学,它就在那里;你想或...

3398
来自专栏技术专栏

hive 中 统计某字段json数组中每个value出现的次数

需要将json数组里的qd_title都提取出来转换成hive中的array数组。下面介绍两种方法

1183
来自专栏Java成神之路

Oracle学习笔记_02_基本SQL

        SQL 语言大小写不敏感。         SQL 可以写在一行或者多行 关键字不能被缩写也不能分行         各子句一般要分行写。 ...

712
来自专栏Java成神之路

Oracle学习笔记_05_分组函数

group by 增强:rollup      cube     grouping      grouping set

802
来自专栏Java架构沉思录

深入理解-Spring-之源码剖析IOC(二)

我们刚刚创建了Bean工厂,并创建 BeanDefinitions 放进Map里,以beanName为key。那么我们现在有了Bean定义,但还没有实例,也没有...

422
来自专栏别先生

MYSQL操作数据表中的记录

36:操作数据表中的记录 插入记录   INSERT INTO 表名  VALUES();   或者INSERT 表名  VALUES(); ? ? ? ? ...

1815
来自专栏王磊的博客

MongoDB Query 的几个方法

Query.All("name", "a", "b");//通过多个元素来匹配数组 Query.And(Query.EQ("name", "a"), Query...

2598

扫码关注云+社区