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. linux物理页面的换入换出简析

    2017-04-25 我们都知道,现代操作系统使用分页机制和虚拟内存,同时为了提高物理页面的利用率,采用了请求调页的机制,即物理内存的分配只有在真正需要的时候才会进行,比如发生了真正的读写操作,而普通 ...

  2. python web框架 django 工程 创建 目录介绍

    # 创建Django工程django-admin startproject [工程名称] 默认创建django 项目都会自带这些东西 django setting 配置文件 django可以配置缓存 ...

  3. 从CPU/OS到虚拟机和云计算

      从CPU/OS到虚拟机和云计算  作者:张冬            关于软硬件谁为主导这个话题,套用一句谚语就是三十年河东三十年河西.风水轮流转.软件和硬件一定是相互促进.相互拆台又相互搭台的. ...

  4. 消息编解码Nanopb - protocol buffers

    Google Protocol Buffer 有各种版本的代码包,Python C/C++.JAVA.C.OBJ-C..NET等,嵌入式设备中使用的protobuf版本,我们选择的是nanoprobu ...

  5. PAT 1086 Tree Traversals Again[中序转后序][难]

    1086 Tree Traversals Again(25 分) An inorder binary tree traversal can be implemented in a non-recurs ...

  6. 给定1-a的随机数生成器,产生1-b的随机数生成器

    转自http://www.code123.cc/959.html 先给出一个例子,后面会有扩展 题目 给你一个能生成1到5随机数的函数,用它写一个函数生成1到7的随机数. (即:使用函数rand5() ...

  7. matplotlib对LaTeX数学公式的支持

    Matlplotlib对LaTeX有一定的支持,如果记得使用raw字符串语法会很自然: xlabel(r"x2y4x2y4") 在matplotlib里面,可以使用LaTex的命令 ...

  8. 聚类之k-means

    1.介绍 k-means算法以k为参数(所期望的簇的个数),把n个对象分成k个簇(单层划分),用质心(数据点的平均值)定义簇的原型.使得簇内具有较高的相似度,而簇间的相似度较低. 通过聚类,我们能够发 ...

  9. php处理restful请求的路由(转载 http://www.jb51.net/article/47333.htm)

    <?php    class Router {        // 路由表        private $routers = array(            array("nam ...

  10. JavaScript:传对象数组到后台

    页面: <script> function improve() { var improveForm = $('#improveForm'); if (!improveForm.valid( ...