复合模式其实就是混合使用了几种模式来解决一般性问题。这种解决方法一定成熟经过验证的。
其中大名鼎鼎的MVC模式就是一种复合模式,MVC是面试中经常问到的了,就算不是很了解的人也能说出一二来,虽然当时我对设计模式还不懂,但是就懂得胡扯些三层模型,展示层,模型层和控制层。
View视图:用来呈现数据,和用户进行交互,一般来说,视图是用来表示模型层的数据的。
controller控制器:用来取得用户的输入并解读其对模型的意思。
model模型:模型持有所有的数据,状态和程序逻辑。模型并没有注意视图和控制器,但是提供给了操纵和检索状态的借口,并将状态通知给观察者。
可以看出设计得非常巧妙而具有通用性。模型对数据进行操作和保存,可以说是比较独立的,视图让界面设计人员可以独立于后台逻辑。这样流程变得相当清晰,用户操作视图,比如点击了开始按钮,控制器对该事件进行解读,然后调用模型的开始方法,执行对应的业务,模型执行业务完成后,将状态结果告诉给需要知道的对象。这里,有可能是视图也有可能是控制器。那么如何让其解耦呢?这里就用到了观察者模式,需要获得状态结果的对象向模型注册,模型到时候通知对方就可以了。对于视图来说,控制器为视图提供了行为,那么如何让视图和控制器解耦呢?这里就用到了策略模式,对视图的行为都委托给控制器来执行,控制器将请求传递给模型。通过策略模式,视图可以很方便的配置自己的行为。很多时候,视图还使用了组合模式来对控件进行组装。
在开发web应用的时候,经常使用的model2是MVC在web方面的一些调整。javaee中的ssh框架就很好的体现了这点,当然和标准的MVC有一定的差别,那是因为web并不是实时的通知客户变化的,还出于一些不同,因此对模式做出了调整。
分享到:
相关推荐
4. **复合模式**:复合模式将对象组合成树形结构,使用户能对单个对象和组合对象以相同的方式进行操作。在C#中,这种模式常用于UI组件树(如WinForms或WPF中的控件)或文件系统的目录结构。 5. **观察者模式**:...
这份笔记主要基于《JavaScript高级程序设计》这本书,旨在深入探讨ECMAScript、DOM操作以及各种编程特性。 首先,ECMAScript是JavaScript的基础,它定义了语言的语法和基本对象。学习纪要中提到的ECMAScript部分...
比如,改进热管设计,采用多层或复合热管结构,可以提高热量传输效率;优化风扇叶片形状和转速,既能保证风量,又能降低噪音;还可以采用液态金属导热剂替代传统的硅脂,提高热传导性能。 软件层面也有策略可实施。...
- **性能下降的原因**:查询执行时间过长、等待时间长通常是由于查询语句编写不当或者索引设计不合理导致的。 - **查询语句质量**:低效的查询语句会导致性能问题。例如,使用`SELECT *`而非指定字段查询;或者查询...
### Cadence PCB入门笔记+设计经验 #### 一、背景知识概述 本章节主要介绍了PCB(Printed Circuit Board,印刷电路板)的基础知识及其制作流程。这些基础知识对于初学者来说至关重要,因为它们构成了理解更高级...
### C语言设计笔记——分享设计思路 #### 软件工程的三要素 - **方法**:提供“如何做”的技术指导,是软件开发的基础。 - **工具**:为软件工程方法提供自动化的或半自动的支持环境,提高开发效率。 - **过程**:...
- **起源**: Go语言由Google公司的Robert Griesemer、Rob Pike及Ken Thompson三位工程师在2007年开始设计,并于2009年正式发布。 - **目标**: 旨在解决现代软件开发中的常见问题,如构建效率低、并发编程复杂等。 #...
8. 复合操作和延迟初始化的线程安全性:对于涉及多个可变字段的复合操作,需要以原子方式进行更新以保证线程安全。延迟初始化涉及的线程安全问题,可以使用双重检查锁定模式来解决。 9. Java内置锁的重入性:内置锁...
6. **用户应用场景**:为了体现这种设计的实用性,可能会介绍各种使用场景,比如折叠成平板模式用于触控操作,或者半折叠状态下的站立模式,以适应不同的工作和娱乐需求。 7. **未来展望**:最后,报告可能会展望...
### Python学习笔记与简明教程知识点汇总 #### Python 第1课:安装 - **知识点**: - Python 安装包的选择(官方下载站点获取最新版本) - Windows/Linux/MacOS 下Python环境的安装步骤 - 环境变量配置方法...
{14}xml}{204}{chapter.14} {14.1}元素}{204}{section.14.1} {14.2}XML的设计}{205}{section.14.2} {14.3}DTD/Schema}{205}{section.14.3} {14.3.1}SAX应用}{206}{subsection.14.3.1} {14.4}dom4j}{207}{...
Go语言是由Google公司于2009年设计并推出的,旨在解决现代软件开发中的效率、并发性和可部署性问题。它是一种静态类型、编译型的语言,语法简洁明了,同时也引入了诸如goroutines和channels等高级并发机制,使得编写...
通过学习这些笔记,开发者能够熟练掌握Struts的MVC设计模式,了解Hibernate的ORM机制,以及如何在实际项目中整合这两个框架。此外,虽然没有直接提及Spring,但理解Spring对于构建高效、可维护的Java应用至关重要。...
### Photoshop 笔记知识点解析 #### 第一节:认识图像 **位图图像与矢量图像的区别** - **位图图像**:这类图像由一个个单独的像素点组成,每个像素点仅存储一种颜色信息。因此,在进行放大或缩小操作时,位图...
接口在Java中不仅是一种类型定义,还与多种设计模式紧密相关: - **定制服务模式**:通过设计精细的接口,每个接口代表一组特定的服务,通过继承创建复合接口,便于模块化和扩展。 - **适配器模式**:用于解决不同...
- 系统根据其组成分为自然系统、人造系统和复合系统,其中信息系统作为人造系统,由人、软硬件和数据资源构成,旨在实现组织活动的有效管理和控制。 - 组织活动可归纳为物流、资金流、事物流和信息流,其中信息流在...
- **接口技巧**:接口在Go语言中作为类型系统的核心组件,广泛应用于各种设计模式中。 7. **并发**: - **Goroutine**:轻量级的线程,由Go运行时进行管理。 - **Channel**:用于goroutine之间进行通信的类型。 ...
### 计算机网络本科 自考通信概论串讲笔记 #### 一、基本信息与通信基础知识 1. **信息的概念**: - 信息是指人类为了传递思想、知识等内容而通过语言、文字、图片等形式表达的内容。 - 信息可以分为不同类型的...
- **设计**:包括类的设计、继承结构的构建等。 - **实现**:具体实现各个类的功能。 #### 出错提示 - **调试技巧**:利用编译器错误消息、断点调试等方法定位问题。 - **日志记录**:记录关键操作的日志信息,便于...