《Head First 设计模式》总结
复合模式——模式的模式
MVC(模型-视图-控制器):是由数个设计模式结合起来的模式。
戴着模式的有色眼镜看MVC:
模型利用观察者模式让控制器和视图可以随最新的状态改变而更新。
模型对视图和控制器一无所知,它们之间是完全解耦的,模型只知道有一些观察者它需要通知。模型还提供一些接口,供视图和控制器获得并设置状态。
视图和控制器实现了策略模式。控制器是视图的行为,如果你希望有不同的行为,可以直接换一个控制器。
视图内部使用组合模式来管理窗口、按钮以及其他显示组件。……
MVC与Web
Web开发人员适配MVC,使它符合浏览器/服务器模型。我们称这样的适配为Model 2,并使用Servlet和JSP技术的结合来达到MVC的分离效果。

Model 2
- 发出一个会被Servlet收到的HTTP请求。
- Servlet扮演控制器。
- 控制器将控制权交给视图。
- 模型通过JavaBean获得。
- 视图通过HTTP将页面返回浏览器。
设计原则
- 封装变化
- 多用组合,少用继承
- 针对接口编程,不针对实现编程
- 为交互对象之间的松耦合设计而努力
- 类应该对扩展开放,对修改关闭
- 依赖抽象,不要依赖具体类
- 只和朋友交谈
- 别找我,我会找你
- 类应该只有一个改变的理由
设计模式及其描述
| 模式 | 描述 |
| 策略 | 封装可以互换的行为,并使用委托来决定要使用哪一个。 |
| 观察者 | 让对象能在对象改变时被通知。 |
| 装饰者 | 包装一个对象,以提供新的行为。 |
| 工厂方法 | 由子类决定要创建的具体类是哪一个。 |
| 抽象工厂 | 允许客户创建对象的家族,而无需指定他们的具体类。 |
| 单件 | 确保有且只有一个对象被创建。 |
| 命令 | 封装请求成为对象。 |
| 适配器 | 封装对象,并提供不同的接口。 |
| 外观 | 简化一群类的接口。 |
| 模板方法 | 由子类决定如何实现一个算法中的步骤。 |
| 迭代器 | 在对象的集合之中游走,而不暴露集合的实现。 |
| 组合 | 客户用一致的方式处理对象集合和单个对象。 |
| 状态 | 封装了基于状态的行为,并使用委托在行为之间切换。 |
| 代理 | 包装对象,以控制对此对象的访问。 |
模式分类

创建型:涉及到将对象实例化,这类模式都提供一个方法,将客户从所需要实例化的对象中解耦。
行为型:涉及到类和对象如何交互及分配职责。
结构型:把类或对象组合到更大的结构中。
剩下的模式
桥接(Bridge)
生成器(Builder):封装一个产品的构造过程,并允许按步骤构造。
责任链(Chain of Responsibility):让一个以上的对象有机会能够处理某个请求的时候。
蝇量(Flyweight):让某个类的一个实例能用来提供许多“虚拟实例”。
解释器(Interpreter)
中介者(Mediator)
备忘录(Memento):让对象返回之前的状态
原型(Prototype):创建给定类的实例的过程很昂贵或很复杂。
访问者(Visitor)
《Head First 设计模式》总结的更多相关文章
- 《FLASH PROGRAMMING 那些事》总结
注明来自 http://www.ssdfans.com/?p=5589 以MLC为例: 对FGF(Floating Gate Flash)技术的,MLC programming一般分两步走:先prog ...
- Implementation of Serial Wire JTAG flash programming in ARM Cortex M3 Processors
Implementation of Serial Wire JTAG flash programming in ARM Cortex M3 Processors The goal of the pro ...
- [原创] Keil uVision5 下载程序 add flash programming algorithm选项缺少需要的算法解决办法
MDK开发环境从V4升级到V5后,支持包不再是集成到开发环境当中,而是封装在PACK中,需要自行安装,比较麻烦. 搭建MDK开发环境以及破解的方法,在前面的文章中有详细说明,这里不再赘述,有兴趣的可以 ...
- Turtelizer 2 provide JTAG Flash programming and debugging of ARM based boards via USB
http://www.ethernut.de/en/hardware/turtelizer/ Introducing Turtelizer 2 Overview Turtelizer 2 had be ...
- 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.3)- 串行NOR Flash下载算法(J-Link工具篇)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是J-Link工具下i.MXRT的串行NOR Flash下载算法设计. 在i.MXRT硬件那些事系列之<在串行NOR Flash X ...
- Programming Internal Flash Over the Serial Wire Debug <SWD> Interface -- EFM32
1 Debug Interface Overview 1.1 Serial Wire Debug Serial Wire Debug (SWD) is a two-wire protocol for ...
- Error:Flash Download Failed-"Cortex-M3"
Error:Flash Download Failed-"Cortex-M3"出现一般有两种情况: 1.SWD模式下,Debug菜单中,Reset菜单选项(Autodetect/H ...
- STM32F4读写内部FLASH【使用库函数】
STM32F4Discovery开发帮使用的STM32F407VGT6芯片,内部FLASH有1M之多.平时写的代码,烧写完之后还有大量的剩余.有效利用这剩余的FLASH能存储不少数据.因此研究了一下S ...
- Flash Download Failed-"Cortex-M3"
rror:Flash Download Failed-"Cortex-M3"出现一般有两种情况: 1.SWD模式下,Debug菜单中,Reset菜单选项(Autodetect/HW ...
- Stm32_调试出现 Error:Flash Download Failed-"Cortex-M3"
rror:Flash Download Failed-"Cortex-M3"出现一般有两种情况: 1.SWD模式下,Debug菜单中,Reset菜单选项(Autodetect/HW ...
随机推荐
- completer自动完成
由于项目需要,在输入框中要做一些输入限制的同时,更加要求用户体验,提供一些自动完成设置.所以有需求,总会有解决方式,下面说一下自动完成插件的原理: html的body部分: <span styl ...
- jzoj5683. 【GDSOI2018模拟4.22】Prime (Min_25筛+拉格朗日插值+主席树)
题面 \(n\leq 10^{12},k\leq 100\) 题解 一眼就是一个\(Min\_25\)筛+拉格朗日插值优化,然而打完之后交上去发现只有\(60\)分 神\(tm\)还要用主席树优化-- ...
- Linux的重要子目录
1: 网卡的配置文件 [ :0C::::BD #MAC地址 TYPE=Ethernet #以太网 UUID=e982e20a-e7ef--8e44-a7c0c474c708 #Linux系统内部的标 ...
- Python循环加强版——列表生成式
记得我们在其他语言中都学到过循环,尤其是对for循环是再熟悉不过了 比如我有一个数组 a[10]={1,2,3,4,5,6,7,8,9,10} 下面需要依次循环打印出来,C语言首先想到的是 for( ...
- xshell一直连接中断 守护进程
last指令 重新登录使用last指令查看登录情况 pts的理解 who:查看目前有谁在线 pts是所谓的伪终端或虚拟终端,具体表现就是你打开一个终端,这个终端就叫pts/0,如果你再打开一个终端,这 ...
- 解决maven项目中有小红叉的问题
首先在window--perferences--showview中显示problems中查看出错的原因
- IIS Express被局域网访问
在 文件夹 C:\Users\administrator\Documents\IISExpress\config 下面 applicationhost.config 文件里 找到相应的项目 如 < ...
- Java线程同步之静态方法
静态方法是同步方法:自动加锁,锁的对象是类对象 public static void main(String[] args) { Thread [] threadArr=new Thread[10]; ...
- 前端CSS css引入方式 css选择器 css选择器优先级
一. CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素,给HTML设置样式,让它更加美观. 当浏览器读到一个样式表,它就会按照这个样式表 ...
- Tomcat故障
1.1 故障日志 31-May-2018 16:11:41.136 INFO [http-nio-8017-exec-5] org.apache.coyote.http11.AbstractHttp1 ...