1概述

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

2适用性

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

3参与者

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

4类图

 

5示例

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

ConcreteStrategy

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

Context

  1. package cn.lynn.strategy;
  2. public class Context {
  3. private DBHelper dbHelper;
  4. public Context(DBHelper dbHelper) {
  5. this.dbHelper = dbHelper;
  6. }
  7. public void execute() {
  8. dbHelper.crud();
  9. }
  10. }

Client

  1. package cn.lynn.strategy;
  2. public class Client {
  3. public static void main(String[] args) {
  4. Context context = new Context(new JdbcTemplateImpl());
  5. context.execute();
  6. context = new Context(new HibernateFactoryImpl());
  7. context.execute();
  8. }
  9. }

Result

  1. 使用JDBC方式操作数据库!
  2. 使用Hibernate持久化方式操作数据库!
 
6

最新文章

  1. 内部使用final参数的原因
  2. Autofac 依赖注入 ASP.NET MVC5 插件机制中插件的简单实现
  3. 谈谈项目中遇到的各种iOS7适配问题
  4. PHP PDO 简单登陆操作
  5. convex optimization
  6. 哈夫曼树(Huffman)的JS实现
  7. jquery.zclip—复制剪贴板(兼容各大浏览器)
  8. 安卓MonkeyRunner源码分析之工作原理架构图及系列集合
  9. leetcode第24题--Reverse Nodes in k-Group
  10. http请求HttpClient短信接口
  11. linux命令之 ifconfig
  12. 使用IDEA搭建Spring Boot入门项目
  13. Beta冲刺NO.6
  14. jQuery---ajax---error函数及其参数详解
  15. 《剑指offer》— JavaScript(27)字符串的排列
  16. Texas Instruments matrix-gui-2.0 hacking -- submenu.php
  17. 程序猿CET4和CET6考试攻略
  18. YARN : Architecture of Next Generation Apache Hadoop MapReduceFramework
  19. Scrum立会报告+燃尽图 01
  20. 从尾到头打印链表(C++和Python 实现)

热门文章

  1. POJ-2777-CountColor(线段树,位运算)
  2. 用 scp 命令通过 SSH 互传文件
  3. surging API网关
  4. (转载)Python中模块的发布与安装
  5. JAVA基础之Date类、DateFormat类及Calendar类
  6. Mysql order by 排序 varchar 类型数据
  7. VMware与Hyper-V不兼容
  8. java object默认的基本方法
  9. Lodash.js常用拷贝
  10. Java 基础案例