java设计模式之行为型设计模式

行为型设计模式:

责任链(Chain of Responsibility):

  1. 用途:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

  2. 场景:

    1. 有多个对象可以处理一个请求,哪个对象处理该请求运行时自动确定。
    2. 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
    3. 可处理一个请求的对象集合被动态指定。
  3. 结构图

    1

  4. 已知应用

    1. Java Servlet : 1 FilterChain = n Filter + 1 Servlet过滤器链,对请求进行过滤
    2. Spring MVC : 1 HandlerExecutionChain = nHandlerInterceptor + 1 handler请求拦截器,对请求进行拦截
    3. Spring MVC : 1 RequestResponseBodyAdviceChain = mRequestBodyAdvice + n ResponseBodyAdvice如:统一Restful风格的响应状态
  5. 相关模式

    1. 责任链常用Composite一起使用。这种情况下,一个构件的父构件可作为它的后继。

迭代器(Iterator)

  1. 用途:提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。

  2. 场景:

    1. 访问一个聚合对象的内容而无需暴露它的内部表示。
    2. 支持对聚合对象的多种遍历。
    3. 为遍历不同的聚合结构提供一个统一的接口。
  3. 结构图

    1

  4. 已知应用

    扫描二维码关注公众号,回复: 13799241 查看本文章
    1. ArrayList
    2. HashSet
  5. 相关模式

    1. Composite:迭代器常被应用到向组合这样的递归结构上。
    2. Factory Method:多态迭代器靠Factory Method来实例化适当的迭代器子类。

策略模式(Strategy)

  1. 用途:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。

  2. 场景:

    1. 许多相关的类只是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。
    2. 一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入它们各自的策略类中以代替这些条件语句。
  3. 结构图

    2

  4. 已知应用

    1. Arrays.sort
    2. Collections.sort
  5. 模板方法(Template Method)

    1. 用途:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤

    2. 场景:

      1. 实现算法的不变部分,并将可变的行为留给子类来实现。
      2. 各子类中的公共行为应被提取出来并集中到一个公共父类中以避免代码重复。
    3. 结构图

      3

    4. 已知应用

      1. AbstractQueueSynchronizer

        public final void acquire(int arg) {
                  
                  
            if (!tryAcquire(arg) &&
                acquireQueued(addWaiter(Node.EXCLUSIVE), arg))
                selfInterrupt();
        }
        
    5. 相关模式

      1. Strategy:模板方法使用继承来改变算法的一部分,Strategy使用委托来改变整个算法。
      2. Factory Method常被模板方法调用。

猜你喜欢

转载自blog.csdn.net/a1774381324/article/details/120796871