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模式。)
  • 相关阅读:
    hdu 3722 Card Game 二分图的最大权匹配
    如何将中国知网CNKI中的文献导入EndNote X6
    高性能以太网芯片W5500 数据手册 V1.0(二)
    (贪心5.1.2)POJ 2287 Tian Ji -- The Horse Racing
    [置顶] 斗地主算法的设计与实现--项目介绍&如何定义和构造一张牌
    Robotium学习笔记一
    Robotium学习笔记二
    Robotium学习笔记三
    做一个测试经理我还差多少?
    [每日一题] 11gOCP 1z0-053 :2013-10-9 backup with the KEEP option....................................33
  • 原文地址:https://www.cnblogs.com/ini_always/p/2467088.html
Copyright © 2011-2022 走看看