《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 ...
随机推荐
- Java框架之Java Bean
链接 知乎https://www.zhihu.com/question/19773379 总结 符合一定规范的编写的Java类,不是一种技术,而是一种规范.大家对于这种规范,总结了很多开发技巧,工具函 ...
- win7桌面上的ie图标删不掉怎么办
一种准确的方法,不要只看着注册表的名字去删,万一删错一切就无法挽回了. 原文链接:http://zhidao.baidu.com/link?url=9H3xX7ScNSUd5NGxfir9napxOH ...
- ABAP F4使用总结!!
PARAMETERS: p_werks LIKE t001l-werks , p_lgort LIKE t001l-lgort . SELECTION-SCREEN SKIP. ...
- idea 新建maven项目没有src及其子目录问题
注意在这一步中,填写maven的本地地址还有手动修改settings地址非常重要!!! 如果你是第一次配置maven,少配置任何一个将导致你以后建立的mvn项目全部没有src目录!!! 解决办法就是卸 ...
- linux中脚本权限问题以及win下使用telnet测试linux端口
一个脚本叫up,执行脚本报错如下: -bash: ./up: Permission denied 解决: chmod +rx up 在执行,OK了. /************************ ...
- 我的web安全工程师学习之路——规划篇
据网上收集的web安全工程师需要掌握哪些技能,职位要求以及如何入门,加上学习网易推出的web安全工程师微专业课程,为了进一步学习,所以给自己做了一些小小规划,也希望给同样想成为web安全工程师的同仁们 ...
- php 常见递归实例
//计算数组{1,1,2,3,5,8.......} 第n位值 function Process1($i){ if ($i == 0) return 0; if ($i == 1) return 1; ...
- Kibana6.2.x 插件理解
官方地址:https://www.elastic.co/guide/en/kibana/current/development-uiexports.html Type Purpose hacks An ...
- jquery each循环,实现break和continue的功能
break----用return false; continue --用return ture;
- BZOJ 2836 魔法树 链剖裸题~~
正好练练熟练度..(刷水题谋财害命QAQ) #include<cstdio> #include<iostream> #define ll long long #define R ...