复合模式——模式的模式


MVC(模型-视图-控制器):是由数个设计模式结合起来的模式。

戴着模式的有色眼镜看MVC:

模型利用观察者模式让控制器和视图可以随最新的状态改变而更新。

  模型对视图和控制器一无所知,它们之间是完全解耦的,模型只知道有一些观察者它需要通知。模型还提供一些接口,供视图和控制器获得并设置状态。

  视图和控制器实现了策略模式。控制器是视图的行为,如果你希望有不同的行为,可以直接换一个控制器。

  视图内部使用组合模式来管理窗口、按钮以及其他显示组件。……

MVC与Web

  Web开发人员适配MVC,使它符合浏览器/服务器模型。我们称这样的适配为Model 2,并使用Servlet和JSP技术的结合来达到MVC的分离效果。

Model 2

  1. 发出一个会被Servlet收到的HTTP请求。
  2. Servlet扮演控制器。
  3. 控制器将控制权交给视图。
  4. 模型通过JavaBean获得。
  5. 视图通过HTTP将页面返回浏览器。

设计原则


  1. 封装变化
  2. 多用组合,少用继承
  3. 针对接口编程,不针对实现编程
  4. 为交互对象之间的松耦合设计而努力
  5. 类应该对扩展开放,对修改关闭
  6. 依赖抽象,不要依赖具体类
  7. 只和朋友交谈
  8. 别找我,我会找你
  9. 类应该只有一个改变的理由

设计模式及其描述


模式 描述
策略 封装可以互换的行为,并使用委托来决定要使用哪一个。
观察者 让对象能在对象改变时被通知。
装饰者 包装一个对象,以提供新的行为。
工厂方法 由子类决定要创建的具体类是哪一个。
抽象工厂 允许客户创建对象的家族,而无需指定他们的具体类。
单件 确保有且只有一个对象被创建。
命令 封装请求成为对象。
适配器 封装对象,并提供不同的接口。
外观 简化一群类的接口。
模板方法 由子类决定如何实现一个算法中的步骤。
迭代器 在对象的集合之中游走,而不暴露集合的实现。
组合 客户用一致的方式处理对象集合和单个对象。
状态 封装了基于状态的行为,并使用委托在行为之间切换。
代理 包装对象,以控制对此对象的访问。

模式分类


创建型:涉及到将对象实例化,这类模式都提供一个方法,将客户从所需要实例化的对象中解耦。

行为型:涉及到类和对象如何交互及分配职责。

结构型:把类或对象组合到更大的结构中。

剩下的模式


桥接(Bridge)

生成器(Builder):封装一个产品的构造过程,并允许按步骤构造。

责任链(Chain of Responsibility):让一个以上的对象有机会能够处理某个请求的时候。

蝇量(Flyweight):让某个类的一个实例能用来提供许多“虚拟实例”。

解释器(Interpreter)

中介者(Mediator)

备忘录(Memento):让对象返回之前的状态

原型(Prototype):创建给定类的实例的过程很昂贵或很复杂。

访问者(Visitor)

《Head First 设计模式》总结的更多相关文章

  1. 《FLASH PROGRAMMING 那些事》总结

    注明来自 http://www.ssdfans.com/?p=5589 以MLC为例: 对FGF(Floating Gate Flash)技术的,MLC programming一般分两步走:先prog ...

  2. 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 ...

  3. [原创] Keil uVision5 下载程序 add flash programming algorithm选项缺少需要的算法解决办法

    MDK开发环境从V4升级到V5后,支持包不再是集成到开发环境当中,而是封装在PACK中,需要自行安装,比较麻烦. 搭建MDK开发环境以及破解的方法,在前面的文章中有详细说明,这里不再赘述,有兴趣的可以 ...

  4. 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 ...

  5. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.3)- 串行NOR Flash下载算法(J-Link工具篇)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是J-Link工具下i.MXRT的串行NOR Flash下载算法设计. 在i.MXRT硬件那些事系列之<在串行NOR Flash X ...

  6. 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 ...

  7. Error:Flash Download Failed-"Cortex-M3"

    Error:Flash Download Failed-"Cortex-M3"出现一般有两种情况: 1.SWD模式下,Debug菜单中,Reset菜单选项(Autodetect/H ...

  8. STM32F4读写内部FLASH【使用库函数】

    STM32F4Discovery开发帮使用的STM32F407VGT6芯片,内部FLASH有1M之多.平时写的代码,烧写完之后还有大量的剩余.有效利用这剩余的FLASH能存储不少数据.因此研究了一下S ...

  9. Flash Download Failed-"Cortex-M3"

    rror:Flash Download Failed-"Cortex-M3"出现一般有两种情况: 1.SWD模式下,Debug菜单中,Reset菜单选项(Autodetect/HW ...

  10. Stm32_调试出现 Error:Flash Download Failed-"Cortex-M3"

    rror:Flash Download Failed-"Cortex-M3"出现一般有两种情况: 1.SWD模式下,Debug菜单中,Reset菜单选项(Autodetect/HW ...

随机推荐

  1. Java框架之单元测试

    单元测试dao层 @Test   //1.要写 test public void TestUserDao(){ ApplicationContext ctx=new ClassPathXmlAppli ...

  2. vue原理实现

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 16.Shortest Unsorted Continuous Subarray(最短未排序子数组)

    Level:   Easy 题目描述: Given an integer array, you need to find one continuous subarray that if you onl ...

  4. springboot整合dubbo注解方式(二)

    将配置文件进行更换: 在一中是引入: <!--引入dubbo start依赖--> <!-- <dependency> <groupId>com.alibab ...

  5. Java Applet 素数小程序

    en... 1. Applet 这个远古的东西,今天我同学让我帮他看看代码,说applet运行出错.额,反正闲着也是闲着,看看呗 ,结果看到代码...4 2.就是实现这破玩意 package calc ...

  6. Linux系统lvm管理

    pv:   物理卷,被pv命令处理过的物理分区vg:物理卷组        被组装到一起的物理卷pe: 物理扩展        lvm设备的最小存储单元    lvm是pe的整数倍lvm:逻辑卷    ...

  7. 阿里插件检查 lombok报错---方法缺少 '@Override' 注解

    问题: Eclipse里,阿里编码规约插件扫描代码出现,但是idea却没有. 解决: 将以上注解改成 @Setter @Getter @NoArgsConstructor @AllArgsConstr ...

  8. getter与setter

    var obj = { get a() { return 2; }, get c() { return 34 } } Object.defineProperty( obj, 'b', { get: f ...

  9. 爬虫(GET)——爬取多页的html

    工具:python3 目标:将编写的代码封装,不同函数完成不同功能,爬取任意页数的html 新学语法:with open as 除了有更优雅的语法,with还可以很好的处理上下文环境产生的异常. # ...

  10. Google Chrome实用插件

    Tempermonkey 打开上面的链接需要KXSW_VPN_FQ,下面提供国内获取方式 下载 Tempermonkey_4.7 [提取码:7019]并解压 打开C:\Users\%USERNAME% ...