什么是模式?什么是框架?软件为什么要分层?【转】

本文探讨了软件设计中的模式和框架概念,解释了两者的定义及其在软件开发中的作用。此外,还讨论了模式和框架如何帮助提高开发效率及软件质量。

http://blog.vsharing.com/admin/A35524.html

现在软件设计里到处都是模式,框架。有次朋友问什么是模式?我也在学习中,就我的学习经验,给出以下小结。(注意:个人观点,仅供参考,欢迎指正。)

1.什么是模式?

模式,即pattern。其实就是解决某一类问题的方法论。你把解决某类问题的方法总结归纳到理论高度,那就是模式。Alexander给出的经典定义是:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。模式有不同的领域,建筑领域有建筑模式,软件设计领域也有设计模式。当一个领域逐渐成熟的时候,自然会出现很多模式。


2.什么是框架?

框架,即framework。其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。

3.为什么要用模式?

因为模式是一种指导,在一个良好的指导下,有助于你完成任务,有助于你作出一个优良的设计方案,达到事半功倍的效果。而且会得到解决问题的最佳办法。

4.为什么要用框架?

因为软件系统发展到今天已经很复杂了,特别是服务器端软件,设计到的知识,内容,问题太多。在某些方面使用别人成熟的框架,就相当于让别人帮你完成一些基础工作,你只需要集中精力完成系统的业务逻辑设计。而且框架一般是成熟,稳健的,他可以处理系统很多细节问题,比如,事物处理,安全性,数据流控制等问题。还有框架一般都经过很多人使用,所以结构很好,所以扩展性也很好,而且它是不断升级的,你可以直接享受别人升级代码带来的好处。框架一般处在低层应用平台(如J2EE)和高层业务逻辑之间的中间层。

5.软件为什么要分层?

为了实现"高内聚、低耦合"。把问题划分开来各个解决,易于控制,易于延展,易于分配资源...总之好处很多啦:)。

评论:

如果说架构师是在模型图纸上工作的,那么模型元素必须是实实在在的,正如我们不可能期望抽象派画家来设计高楼大厦,没有实际意义的模型元素,是不可能构筑出软件系统的。迄今为止,绝大部分软件架构师是依赖软件程序员来实现他们的架构意图的,这二者直接的鸿沟是显而易见的。设计模式的出现是为缩短二者之间的鸿沟所做的努力,目的是让架构师和程序员之间有更多的共同语言和规范。尽管设计模式让软件开发效率和质量有一定程度的提升,但是它始终面临一个很明显的局限,那就是人的因素。人虽然在创造性方面有绝对优势,但是在精确性、持久性、效率、质量上是无法比拟机器的。所以我们希望在软件系统构建过程中,人和机器发挥各自的长处,也就是说,让人来扮演架构师的角色,而让机器来扮演程序施工者的角色。事实上,目前已经有了成功的模式了,那就是KCOM 商业工程(http: //www.kcomsoft.com)企业应用平台所采用的基于设计的全自动化软件工厂模式,采用这种模式,架构师在工具平台所提供的模型图设计环境里做软件系统的设计,设计结果由工具平台自身所带的"软件工厂"自动加工成最终企业应用软件系统。这样的开发模式,能使企业应用软件系统的开发在效率、质量上有了质的提升,从根本上区别于传统的设计模式,因为这里的设计模式已经包含在软件工厂编译器之中了。

<think>我们开始逐步回答用户的问题。用户希望了解设计模式相关的概念,包括模式设计模式、面向对象设计模式的定义,学习和应用设计模式的方法,以及框架设计模式的关系。我们将按照以下结构进行回答:1.设计模式的定义2.面向对象设计模式3.如何学习设计模式4.设计模式的应用5.框架的定义6.框架设计模式的区别与联系在回答中,我们将确保:-行内数学表达式使用$...$格式(虽然本问题可能较少涉及数学公式,但如果有会注意)-独立公式使用$$...$$格式-使用中文回答-生成相关问题-引用的段落末尾添加引用标识现在开始正式回答:</think> ### 设计模式详解 #### 1. 设计模式的定义 设计模式是**针对软件设计中常见问题的可复用解决方案模板**。它不是具体代码,而是经过验证的最佳实践总结,提供: - **通用设计结构**:解耦对象关系(如$Observer$模式) - **设计原则实现**:如开闭原则($O=C$,开放扩展/封闭修改) - **语境相关方案**:针对特定问题场景(如创建型/结构型/行为型模式) > 模式概念最早由建筑师Christopher Alexander提出,后被软件领域引入[^1]。 #### 2. 面向对象设计模式 这是设计模式的核心分支,通过**对象协作**解决设计问题: ```mermaid graph LR A[对象创建] -->|工厂方法| B[灵活实例化] C[对象扩展] -->|装饰者模式| D[动态添加功能] E[对象交互] -->|观察者模式| F[解耦通知机制] ``` 典型示例:`Strategy模式` 将算法封装为独立对象,支持运行时替换(满足$LSP$里氏替换原则) #### 3. 如何学习设计模式 **推荐学习路径**: 1. **掌握基础原则**:SOLID原则($SRP$单一职责等) 2. **理解模式分类**: - 创建型(如Singleton) - 结构型(如Adapter) - 行为型(如Command) 3. **实践方法**: - 分析JDK/Spring源码中的模式应用 - 重构现有代码应用模式 - 避免过度设计,仅在解决实际痛点时使用 > GoF《设计模式:可复用面向对象软件的基础》是最权威的学习资源[^2]。 #### 4. 设计模式的应用 **应用场景示例**: | 场景 | 适用模式 | 优势 | |---------------------|------------------|-----------------------| | 跨平台UI组件 | Abstract Factory | 隔离平台相关创建逻辑 | | 请求日志与撤销 | Command | 封装操作并支持事务化 | | 动态数据过滤 | Decorator | 避免子类爆炸问题 | **应用原则**: - 优先满足$DIP$依赖倒置原则 - 模式组合优于单一模式(如复合使用Factory+Observer) #### 5. 框架的定义 框架是**特定领域的半成品应用结构**,包含: - 预定义架构(如MVC分层) - 基础功能库(如Spring的$IoC$容器) - 扩展机制(钩子方法/插件接口) > Martin Fowler强调框架实现了"控制反"($IoC$)[^3] #### 6. 框架设计模式的联系区别 | 维度 | 设计模式 | 框架 | |--------------|------------------------------|-------------------------------| | **粒度** | 微观设计解决方案 | 宏观应用架构 | | **复用性** | 概念级复用 | 代码级复用 | | **强制性** | 可选应用 | 强制遵循架构约束 | | **关系** | 模式组合构成框架基础 | 框架内置模式实现(如Spring的$Proxy$模式) | | **示例** | Observer模式解耦对象通信 | Spring框架实现AOP | **核心联系**:框架模式的集装箱,如Java EE实现$Front\ Controller$+$Dispatcher\ View$模式组合 --- ### 相关问题 1. 哪些设计模式最常用于解耦系统组件? 2. 如何判断何时使用框架而非设计模式? 3. 设计模式如何支持开闭原则($OCP$)? 4. MVC框架设计模式的具体关系是什么? [^1]: Alexander, C. (1977). A Pattern Language [^2]: Gamma, E. et al. (1994). Design Patterns: Elements of Reusable Object-Oriented Software [^3]: Fowler, M. (2002). Patterns of Enterprise Application Architecture
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值