Template模式

Template模式顾名思义是提供了一种模板,也就是针对某种业务提供了模范框架。这个在spring中是属于核心模式的,因为其ApplicationContext抽象类就是模板模式的终极体现。

Template模式一般情况下是指针对某种业务算法(或者业务动作)形成的固定模式。而且它是基于继承的一种实现。由父类类完成模板方法,仅留出模板方法中的特别处理方法作为抽象方法,交由子类根据具体情况来实现。

对于具体使用,要引用一下《Expert》中的一句话“Publicsuperclass methods are usually final: the abstract methods deferredto subclasses are protected. ”正如这句话前面的一段所描述的,父类控制整个业务流,而将不能确定一些具体实现延迟给子类实现。刚这句话是借用java的基本属性来强制这种实现方式。父类中定义的工作流方法应该用publicfinal关键字,而抽象方法应该用protectedabstract 关键字。

通过Template模式,还实现了子类对父类的反向依赖。这样就由原来上层类依赖具体实现的情况,变成了子类依赖父类的具体逻辑,对于业务的实现主体都是在父类中完成的。

Strategy模式

策略是指在某种状况下,应该出手的套路。这包含了两个方面,一是固定的策略模板,一是具体实现。Strategy模式正是这样来实现的,它提供了一个具有策略模板的接口,具体业务系统仅依赖这个接口,而这也是依赖反转的一个具体例子。为何是依赖反转呢?因为业务具体依赖接口,而具体的策略实现也是依赖接口。那么如果按照我们直观的做法,可能就是由业务系统直接依赖某个具体实现。

命令模式,模板模式和策略模式都是《设计模式》中的行为性模式。《敏捷》就是把Template和Strategy放在一起来描述的。

周末公司培训,好多东西要消化,反倒是把blog放下了两天,心里很不痛快。

这次写的并不多,但从动手写这些东西,心里就不断有想法涌现。以前看过的书,真还需要多看几遍,是切切实实地留在自己的记忆力,融到自己的代码中。可惜以前总是将那么多好资料束之高阁。

在写这些笔记的时候,也一直在考虑应该怎样去描述,画一个清晰的类图,太懒了,因为在《Design Patterns》中有很多好的类图,关系图。而现在自己写下来的是自己的理解。

Dive into Spring framework -- 了解基本原理(二)--设计模式-part2的更多相关文章

  1. Dive into Spring framework -- 了解基本原理(二)--设计模式-part1

    比较巧,自己在接触设计模式的时候,也刚开始学习spring,但可惜的是,真的仅仅在学习“用”spring,每天都沉浸在会痛快的完成spring各种配置的快乐之中,但对成长无用.其实当初就清楚,spri ...

  2. Dive into Spring framework -- 了解基本原理(一)

    在继续我们的分析之前,推荐各位静心来读一下<<Expert_OneOne_J2EE_Design_and_Development>> 第四章, 正如spring BeanFac ...

  3. Dive into Spring framework -- 搭建spring 源码的开发环境

    spring是一个类之间依赖的管理容器,大家都知道,但我们中很多人都仅仅停留在使用的层面,但spring本身具有极大的研究价值,所以在使用了几年spring之后,还是想深入的探究一下其根源.记录于此, ...

  4. Spring Boot 启动(二) 配置详解

    Spring Boot 启动(二) 配置详解 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Spring Boot 配置 ...

  5. Spring Framework简介

    作者关于此主题早期文章 Spring框架快速入门 起源 要谈Spring的历史,就要先谈J2EE.J2EE应用程序的广泛实现是在1999年和2000年开始的,它的出现带来了诸如事务管理之类的核心中间层 ...

  6. 设计模式学习(二十四):Spring 中使用到的设计模式

    设计模式学习(二十四):Spring 中使用到的设计模式 作者:Grey 原文地址: 博客园:设计模式学习(二十四):Spring 中使用到的设计模式 CSDN:设计模式学习(二十四):Spring ...

  7. Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion(二)

    接前一篇 Spring Framework 官方文档学习(四)之Validation.Data Binding.Type Conversion(一) 本篇主要内容:Spring Type Conver ...

  8. 框架应用:Spring framework (一) - IoC技术

    IoC概念以及目标 IoC就是让原本你自己管理的对象交由容器来进行管理,其主要的目的是松耦合. IoC发展史 既然IoC的目标是为了松耦合,那它怎么做到的? 最后目标:降低对象之间的耦合度,IoC技术 ...

  9. Spring Framework(框架)整体架构 变迁

    Spring Framework(框架)整体架构 2018年04月24日 11:16:41 阅读数:1444 标签: Spring框架架构 更多 个人分类: Spring框架   版权声明:本文为博主 ...

随机推荐

  1. luarocks安装以及lfs安装

    一.先安装lua: brew install lua 我本机的安装路径为:/usr/local/Cellar/lua/5.3.4_2 二.安装luarocks 下载luarocks的安装包: http ...

  2. 利用ssh的私钥登录Linux server

    [https://blog.csdn.net/hello0370/article/details/41650513] 1.创建一个private key的文件,我使用vim编辑器,创建vi my_pr ...

  3. @JsonFormat与@DateTimeFormat注解的使用

    背景:从数据库获取时间传到前端进行展示的时候,我们有时候可能无法得到一个满意的时间格式的时间日期,在数据库中显示的是正确的时间格式,获取出来却变成了很丑的时间戳,@JsonFormat注解很好的解决了 ...

  4. Spark集群 Python Package管理

    具体问题: 不同的数据分析人员/开发团队需要不同版本的Python版本执行PySpark. 同一Python版本下,需要安装多个Python库,甚至需要不同版本的库. 针对问题2的一个解决办法是将Py ...

  5. Codeforces Round #412 (rated, Div. 2, base on VK Cup 2017 Round 3) D - Dynamic Problem Scoring

    地址:http://codeforces.com/contest/807/problem/D 题目: D. Dynamic Problem Scoring time limit per test 2 ...

  6. JSON 转 对象

    Json对象与Json字符串的转化.JSON字符串与Java对象的转换   一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); ...

  7. 伪类 :after 清除浮动的原理和方法

    浮动元素容器的clearing问题1. 问题的由来有这样一种情形:在一个容器(container)中,有两个浮动的子元素.<div>        <div style=" ...

  8. 查看ubuntu 各系统的内核版本

    1.查看ubuntu版本号:   cat  /etc/issue 返回结果: Ubuntu 16.04.2 LTS \n \l   2.查看内核版本号:   cat /proc/version 返回结 ...

  9. Redis学习笔记之Redis单机,伪集群,Sentinel主从复制的安装和配置

    0x00 Redis简介 Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure server). Redis的键值 ...

  10. Nginx基础笔记

    压力测试工具:ab ab -n 请求数 -c 并发数 请求url Nginx: Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务. 特点 ...