《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)
标签:
设计模式
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库