zoukankan      html  css  js  c++  java
  • 设计模式读书笔记[1]:策略模式(Strategy)

    策略模式(Strategy):
         定义一组算法族,分别封装起来,它们之间可以相互替换。此模式让算法的变化独立于使用算法的客户。
     
     
    核心思想(个人理解):
         1. 对于相互属于同一类但有不同特性的个体,它们绝对相同的行为使用继承实现;略有不同或者将来会有不同的行为使用组合实现。但总的来说,使用组合要好于使用继承。
         2. 尽量面向接口编程,不要面向实体对象编程。
     
     
    以Spring的ServletContextListener为例:
     
    在web project开发中,需要将project放入一个Servlet容器运行(如tomcat),这时,需要一个ServletContextListener来监听并处理Context Initialized事件和Context Destroyed事件;
    同时,在使用Log4j记录一些日志时,也需要一个ServletContextListener来监听并处理Context Initialized事件和Context Destroyed事件。也就是说,它们具有相同的需求:一个ServletContextListener。
    但是,两者对这个Listener的具体需求却不一样:前者需要加载Spring配置文件,启动和销毁web app的执行环境;而后者则只是启动和销毁log4j的执行执行环境。
     
    这时,就需要两个ServletContextListener的实现:一个ContextLoaderListener用于前者,一个Log4jConfigListener用于后者。但是,对于二者来说,它们并不知道自己的具体类型,因为它们只知道它们所使用的是ServletContextListener。
    =============================================================================
     
    上例中,ServletContextListener的两个具体实现就是定义了两个算法并封装起来,而Servlet容器则是使用这两个算法的客户。
    (不过说实话,个人觉得这个例子举得略显牵强,主要是感觉Spring中并没有特别强调使用Strategy的部分。但是,因为Spring遵循的是面向接口编程,所以可以毫不夸张地说,Spring处处都使用了Strategy模式。)
  • 相关阅读:
    Web 自动化测试(Selenium) PO 模型
    Web 自动化测试(Selenium) 鼠标和键盘操作以及浏览器等待
    Web 自动化测试(Selenium)进阶及八大元素定位
    web 自动化测试(Selenium) Xpath 和 Css 定位元素
    没有最全,只有更全的正则表达式集合(持续更新...)
    SQL优化第一篇
    C# 设置桌面为父窗口
    Spring Boot整合MybatisPlus逆向工程(MySQL/PostgreSQL)
    IDEA2020.2版本设置类和方法的自定义注释模板
    记一个Java多线程相关的面试题
  • 原文地址:https://www.cnblogs.com/ini_always/p/2467088.html
Copyright © 2011-2022 走看看