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模式。)
  • 相关阅读:
    如何查看存储过程中动态生成的sql
    [原] 高淇Java300集系列笔记 (待续)
    [原] 在HTML文档中添加标签名、ID、类名
    jquery学习笔记1-Ajax跨站请求资源
    博客搬家啦。请访问我的新底盘www.boyipark.com
    web端跨域调用webapi
    遮罩层
    去掉字符串后最后一个 ","
    对JAVA的static深刻理解(结合C语言的思考)
    java事件响应方法汇总(容器类监听、监听器类、AbstractAction、反射)
  • 原文地址:https://www.cnblogs.com/ini_always/p/2467088.html
Copyright © 2011-2022 走看看