传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229

1概述

定义一系列算法,把它们一个个都封装起来,并且让它们可以相互替换。策略模式使得算法可以独立于使用它的客户而发生变化。

2适用性

(1)许多相关的类仅仅是行为存在差异的时候。“策略”提供了一种使用多个行为中的一个来配置一个类的方法。
(2)需要使用一个算法的不同变体的时候。
(3)算法使用了客户不应该知道的数据的时候。以避免暴露复杂的、与算法相关的数据结构。
(4)一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现的时候。将相关的条件分支移入它们各自的Strategy类中以代替这些条件语句。    

3参与者

(1)Strategy:定义所有支持的算法的公共接口。Context使用这个接口来调用某个ConcreteStrategy定义的算法。
(2)ConcreteStrategy:实现Strategy接口的某种具体算法。
(3)Context:用一个ConcreteStrategy对象来配置。维护一个对Strategy对象的引用。可定义一个接口来让Stategy访问它的数据。

4类图

5示例

Strategy
package cn.lynn.strategy;public abstract class DBHelper {public abstract void crud();}

ConcreteStrategy

package cn.lynn.strategy;public class JdbcTemplateImpl extends DBHelper {@Overridepublic void crud() {System.out.println("使用JDBC方式操作数据库!");}}
package cn.lynn.strategy;public class HibernateFactoryImpl extends DBHelper {@Overridepublic void crud() {System.out.println("使用Hibernate持久化方式操作数据库!");}}

Context

package cn.lynn.strategy;public class Context {private DBHelper dbHelper;public Context(DBHelper dbHelper) {this.dbHelper = dbHelper;}public void execute() {dbHelper.crud();}
}

Client

package cn.lynn.strategy;public class Client {public static void main(String[] args) {Context context = new Context(new JdbcTemplateImpl());context.execute();context = new Context(new HibernateFactoryImpl());context.execute();}}

Result

使用JDBC方式操作数据库!
使用Hibernate持久化方式操作数据库!

转载于:https://www.cnblogs.com/innosight/archive/2013/06/13/3271181.html

GoF23种设计模式之行为型模式之策略模式相关推荐

  1. GoF23种设计模式之行为型模式之解释器模式

    一.概述         给定一种语言和其文法的一种表示,再定义一个解释器,该解释器使用表示来解释语言中的句子. 二.适用性              当需要解释一种语言,并且可以将该语言中的句子表示 ...

  2. 备战面试日记(3.2) - (设计模式.23种设计模式之创建型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.6 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...

  3. 备战面试日记(3.4) - (设计模式.23种设计模式之行为型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.12 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文 ...

  4. 【Java】Java与GoF-23种设计模式

    文章目录 设计模式概述 GoF-23种设计模式 设计模式的分类 设计模式的原则 设计模式在JDK的部分体现 Singleton Factory Abstract factory Adapter Com ...

  5. GOF23种设计模式在Java中的应用(part 3)

    本文接续:GOF23种设计模式在Java中的应用(part 2) 行为型模式 行为型模式关注系统中对象之间的相互交互.,研究系统在运行时对象之间的相互通信和协作,进一步明确对象的职责,共有11种模式. ...

  6. GOF23种设计模式在Java中的应用(part 1)

    第二部分:GOF23种设计模式在Java中的应用(part 2) 一.GOF来源及简介 1.1 GOF23种设计模式简介 <Design Patterns: Elements of Reusab ...

  7. 【设计模式系列24】GoF23种设计模式总结及软件设计7大原则

    设计模式总结及软件设计七大原则 设计模式系列总览 前言 软件设计7大原则 开闭原则(Open-Closed Principle,OCP) 里氏替换原则(Liskov Substitution Prin ...

  8. GOF23种设计模式在Java中的应用(part 2)

    本文接续part1:GOF23种设计模式在Java中的应用(part 1) 结构型模式 结构型模式: – 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结 构,用来解决更大的问题. – 分 ...

  9. GOF23种设计模式你知道是什么吗?都有什么作用?

    ​一.GOF简介       GOF是设计模式的经典名著Design Patterns: Elements of Reusable Object-Oriented Software(中译本名为< ...

最新文章

  1. centernet2019.11.05
  2. 数据挖掘中的概念描述
  3. el表达式与jstl的用法
  4. Django搜索工具——全文检索
  5. [论文阅读] TransFuse: Fusing Transformers and CNNs for Medical Image Segmentation
  6. Apache 配置SSL网站
  7. nodejs-基础:路由基础
  8. OpenCV源码解析之动态内存管理CvMemStorage与CvSeq
  9. 什么是TTL电平和cmos电平?ttl电平和cmos电平的区别是什么?
  10. 第一部分 移动终端芯片概述
  11. ctfshow_密码3
  12. 公众号如何用微信红包吸粉而不被封号?实战24天10万粉
  13. 李宏毅学习笔记35.GAN.06.Tips for Improving GAN
  14. Api 数据自动入库
  15. 雷军:同事格式化了我的电脑,让我走上当CEO的“不归路”
  16. 微信7.0fiddler、Charles抓包报HTTPS证书信任问题通报
  17. Windows 2008R2 +MDT2013+WDS(1)
  18. 1095: 统计元音(函数专题)
  19. 【Stable Diffusion | AI 绘画】手把手教你体验--AI 生成唯美二次元
  20. 2022华为开发者大赛北区决赛在1024程序员节北京峰会成功举行

热门文章

  1. 我的网页设计(腾讯网页面制作编写)
  2. python爬虫获取下一页url_Python爬虫获取页面所有URL链接过程详解
  3. Linux用户和用户组和文件权限介绍
  4. MySQL执行计划EXPLAIN详解
  5. Golang 实现求素数【 输入N,求N内素数个数 】
  6. OpenCV计算机视觉实战(Python版)_006边缘检测
  7. 500万数据mysql_mysql 单表500万数据经过处理后新增到新表
  8. linux 软件 runtime,Objective-C中runtime机制的应用
  9. 射击比赛(java)
  10. 是什么职位_2021国家公务员考试职位表出炉!你真的了解什么是公务员吗?