Dive into Spring framework -- 了解基本原理(二)--设计模式-part2
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的更多相关文章
- Dive into Spring framework -- 了解基本原理(二)--设计模式-part1
比较巧,自己在接触设计模式的时候,也刚开始学习spring,但可惜的是,真的仅仅在学习“用”spring,每天都沉浸在会痛快的完成spring各种配置的快乐之中,但对成长无用.其实当初就清楚,spri ...
- Dive into Spring framework -- 了解基本原理(一)
在继续我们的分析之前,推荐各位静心来读一下<<Expert_OneOne_J2EE_Design_and_Development>> 第四章, 正如spring BeanFac ...
- Dive into Spring framework -- 搭建spring 源码的开发环境
spring是一个类之间依赖的管理容器,大家都知道,但我们中很多人都仅仅停留在使用的层面,但spring本身具有极大的研究价值,所以在使用了几年spring之后,还是想深入的探究一下其根源.记录于此, ...
- Spring Boot 启动(二) 配置详解
Spring Boot 启动(二) 配置详解 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Spring Boot 配置 ...
- Spring Framework简介
作者关于此主题早期文章 Spring框架快速入门 起源 要谈Spring的历史,就要先谈J2EE.J2EE应用程序的广泛实现是在1999年和2000年开始的,它的出现带来了诸如事务管理之类的核心中间层 ...
- 设计模式学习(二十四):Spring 中使用到的设计模式
设计模式学习(二十四):Spring 中使用到的设计模式 作者:Grey 原文地址: 博客园:设计模式学习(二十四):Spring 中使用到的设计模式 CSDN:设计模式学习(二十四):Spring ...
- Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion(二)
接前一篇 Spring Framework 官方文档学习(四)之Validation.Data Binding.Type Conversion(一) 本篇主要内容:Spring Type Conver ...
- 框架应用:Spring framework (一) - IoC技术
IoC概念以及目标 IoC就是让原本你自己管理的对象交由容器来进行管理,其主要的目的是松耦合. IoC发展史 既然IoC的目标是为了松耦合,那它怎么做到的? 最后目标:降低对象之间的耦合度,IoC技术 ...
- Spring Framework(框架)整体架构 变迁
Spring Framework(框架)整体架构 2018年04月24日 11:16:41 阅读数:1444 标签: Spring框架架构 更多 个人分类: Spring框架 版权声明:本文为博主 ...
随机推荐
- 【pentaho】【kettle】【Data Integration】试用
要做数据分析,领导让研究一下kettle. 先占个坑. 这里有个3.0的文档: http://wenku.baidu.com/link?url=hvw_cOBIXLXSGvftkGhXQic3CLC7 ...
- awk的常用操作场景以及工作中涉及到的一些场景实例
废话不多说,直接上这个实例: 一. 统计apache日志单ip访问请求数排名: 假设apache日志内容access.log内容为: /Dec/::: +] - /Dec/::: +] - /Dec ...
- PAT 1140 Look-and-say Sequence [比较]
1140 Look-and-say Sequence (20 分) Look-and-say sequence is a sequence of integers as the following: ...
- python全栈开发从入门到放弃之socket并发编程多进程
1.1 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程 ...
- javascript 闭包 内存
- Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) B. Code For 1
地址:http://codeforces.com/contest/768/problem/B 题目: B. Code For 1 time limit per test 2 seconds memor ...
- Winter-1-B Sum 解题报告及测试数据
Time Limit:500MS Memory Limit:32768KB Description Hey, welcome to HDOJ(Hangzhou Dianzi University O ...
- 2 安装企业wiki:confluence
jira sudo /etc/init.d/jira start 启动 jiarsudo /etc/init.d/jira stop 停止 jiar 方法一:$ sudo /etc/init.d/co ...
- i.MX 6Q开发环境配置
#适用于 Ubuntu 14.04 x64 imx6qdl-cubox-i.dtsi #更新系统 sudo apt-get update sudo apt-get upgrade #安装基 ...
- Printf的缓冲机制
转:https://blog.csdn.net/qq_25424545/article/details/78772959 今天用fork()写程序时候,突然发现自己对Printf的缓冲机制还是有些不够 ...