设计模式22-策略模式,Strategy)

技术设计模式22-策略模式,Strategy) 设计模式22-策略模式(Strategy)策略模式的重点在于其实现可以去感知随意替换,根据不同的场景调用不同的实现。设计模式22-策略模式(Strateg

设计模式22-策略模式。

策略的重点是其实现可以随意替换,可以根据不同的场景调用不同的实现。

设计模式22-策略模式(Strategy)

概述

策略的重点是其实现可以随意替换,可以根据不同的场景调用不同的实现。

优点

算法可以自由切换。

避免多重条件判断。

扩展性好。

缺点

阶级扩张。

所有策略类都需要公开。

简单实现

JDK实现

策略需要设计一个接口,为一系列提供外部调用的策略模式实现类提供统一的方法。

界面策略{

/**

*打印邮件

*

* @param消息消息

*/

无效打印(字符串消息);

}

通过不同的实现提供不同的业务逻辑。

公共类正常策略实现策略{

@覆盖

公共无效打印(字符串消息){ 0

System.out.println(消息);

}

}

公共类错误策略实现策略{

@覆盖

公共无效打印(字符串消息){ 0

System.err.println(消息);

}

}

在不同的场景中,通过调用不同的实现类来完成不同的业务逻辑。

公共类设计模式

@测试

public void strategyDesignPattern(){ 0

字符串消息=“这是一条消息”;

strategy print strategy=new normal strategy();

printStrategy.print(消息);

print strategy=new error strategy();

printStrategy.print(消息);

}

}

源码解析

和状态模式的比较

模式封装了业务逻辑,业务逻辑被解耦。模式将业务逻辑封装成状态,状态之间存在切换关系,这可以在上下文或状态本身中实现。

该模式根据不同的业务场景切换不同的业务逻辑;模式通过在同一个场景中设置不同的状态来调用不同的业务逻辑。

策略业务逻辑的增加和删除不影响其他已有的业务逻辑;模式状态的添加和删除需要在其他状态实现中修改切换状态逻辑。

策略模式可以由客户端直接调用,状态模式必须由客户端通过有状态模型调用。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/53729.html

(0)

相关推荐

  • 比尔吉沃特是几区,LOL新手推荐去哪个区

    技术比尔吉沃特是几区,LOL新手推荐去哪个区先来给大家介绍一下联盟各大区英雄联盟国服总共有27个区 电信比尔吉沃特是几区:艾欧尼亚 祖安 诺克萨斯 班德尔城 皮尔特沃夫 战争学院 巨神峰 雷瑟守备 钢铁烈阳

    生活 2021年10月25日
  • Elasticsearch Java Client版本区别及起步是什么

    技术Elasticsearch Java Client版本区别及起步是什么这期内容当中小编将会给大家带来有关Elasticsearch Java Client版本区别及起步是什么,文章内容丰富且以专业的角度为大家分析和叙

    攻略 2021年10月19日
  • C++如何实现操作符重载

    技术C++如何实现操作符重载这篇文章主要介绍了C++如何实现操作符重载,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 在C++

    攻略 2021年12月1日
  • 草船借箭的意思,草船借箭是什么成语还是寓言故事

    技术草船借箭的意思,草船借箭是什么成语还是寓言故事很高兴回答你的问题草船借箭的意思!“草船借箭”既是成语也是典故。这个典故让我们感叹诸葛亮足智多谋的同时,殊不知,故事的背后却危机重重!下面我跟大家一起来分享!一、“草船借

    生活 2021年10月25日
  • 什么是javascript超集

    技术什么是javascript超集本篇内容介绍了“什么是javascript超集”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有

    攻略 2021年10月25日
  • Oracle11g报警功能识别是否会忽略或吞掉错误的程序

    技术Oracle11g报警功能识别是否会忽略或吞掉错误的程序Oracle11g报警功能识别是否会忽略或吞掉错误的程序,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易

    攻略 2021年11月29日