zoukankan      html  css  js  c++  java
  • GoF23种设计模式之行为型模式之策略模式

    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 {
    
        @Override
        public void crud() {
            System.out.println("使用JDBC方式操作数据库!");
        }
    
    }
    
    package cn.lynn.strategy;
    
    public class HibernateFactoryImpl extends DBHelper {
    
        @Override
        public 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持久化方式操作数据库!
  • 相关阅读:
    HTML link标签media参数
    初始化一个本地GIT仓储
    总结一下js的原型和原型链
    根据用户注册信息推荐 代码部分
    冷启动问题概述
    概率图模型
    LFM 隐语义模型
    item Collaborative Filtering
    推荐系统评测
    user Collaborative Filtering
  • 原文地址:https://www.cnblogs.com/innosight/p/3271181.html
Copyright © 2011-2022 走看看