`
javawebsoa
  • 浏览: 424251 次
社区版块
存档分类
最新评论

设计方法(间接法与软件设计模式)

 
阅读更多

从更高的层次来思考设计模式其实就是方法论的范畴,对于现在流行的软件设计模式来讲,对其介绍的出发点大部分都处在程序设计层面.设计模式本身属于方法学层面,是人们在对现实世界的认知和改造过程中总结而来,因此,这些方法无论是在软件设计还是硬件设计,甚至是其它领域的设计都是适用的,是跨学科和跨领域的方法学.
现实世界的对象之间的关系是非常复杂的,在4维空间下,对于对象之间的关系可以简单的分为静态关系和动态关系(这里的4维是指三维空间+一维时间),静态关系表达的是对象之间的位置(在4维空间下),而动态关系表达的是对象之间的相互作用(行为,通信),今天讨论的间接法就是处理对象之间动态关系的一种简单而朴素的方法.由于对象之间的相互作用非常复杂,很多时候在对象之间的直接相互作用(通信)非常困难(不可达,成本高昂,过于复杂),就可以在这些对象中间增加一辅助对象(第三方的,可以是自然存在的,也可以是人为增加的)来达到通信目的,这种方法就是间接法,间接法中的第三方我们称之为中间角色,需要注意的是这个中间角色可以是对象,也可以是"场地".间接法的场景和处理方法在现实世界中无处不在,货币,集市,代理人,银行等.而且这种间接法具有多重性和相对性,多重性是指中间角色可以是横向的多个,也可以是纵向的多个;相对性是指中间角色是相对的,比如A->B->C中,B是中间角色,但在B->C->D中B则是通信方角色.当然,在实际系统设计中,应尽量避免多角色问题,做到对象责任尽量单一.
间接法不仅让对象之间的作用成为可能(比如电话使得两个距离很远的人可以通话),还可以提供很大的灵活性并降低成本(超市,集市等).在软件设计模式中的大多数创建型和行为型基本都属于间接法范畴,而结构型中很多也是这种方法的体现.间接法告诉我们,如果:
A) 如果一个事情直接处理比较困难(对象间通信);
B)如果一个对象处理能力有限(责任过多);(从方法学来说,这种更倾向于辅助法)
C)为了更加灵活和可扩展
......
我们都可以试着增加一些中间角色来辅助处理.需要注意的是如果从角色分解的角度来看,有些中间角色并不处在"中间",这也没有关系.
1)让作用成为可能(解决根本问题);
2)提供了灵活性和可扩展性;

在现实处理中,采用间接法时,设定中间角色相对比较简单,但如何处理原来对象与中间对象的责任关系呢?方法就是责任重新分配,原则就是责任单一.责任单一是一种化繁为简的方法.下面我们来看看软件设计模式中的间接法应用:对于创建模型设计模式,其目的是为了减少消费者对象(对象使用者)的创建责任,同时将创建责任集中起来以获得一定的控制功能,便于创建责任的增加和扩展.利用间接法,增加一个中间角色-对象工厂,专门负责产品对象的创建.在这种模式里将相互作用的对象分为三种角色:产品,工厂和消费者.这种模式跟我们现实社会中绝大部分的产品生产和消费的处理方式是一致的.
对于代理,观察者,命令等模式,都是间接法的典型应用.需要注意的是这些模式并不是软件设计专用的,这些方法都是在现实生产和生活中总结出来的.

PS:写这种文章感觉很耗脑子.

分享到:
评论

相关推荐

    软件设计模式作业三行为式模式

    在软件开发过程中,设计模式是解决常见问题的模板,它们代表了最佳实践,可以提高代码的可读性、可维护性和可复用性。...这个作业提供了实践这些模式的机会,对于学习和掌握软件设计模式有着重要的价值。

    PHP设计模式介绍.

    掌握编程惯用法是深入理解设计模式的前提,因为设计模式往往是在这些基本规则之上建立的更高级的解决方案。 #### 第二章:值对象模式—数据的封装艺术 值对象模式是一种用于处理复杂数据类型的设计模式。与实体...

    中级程序员(软件设计师)真题整理.

    - **选项B**:改善代码的平台可移植性,这不是设计模式直接解决的问题,但它通过提高代码的结构清晰度间接有助于提高可移植性。 - **选项C**:改善代码的可理解性,通过遵循已知的最佳实践,使代码更容易被理解和...

    UML和模式应用.pdf

    本书还介绍了统一建模语言(UML)的表示法,并强调了设计模式的重要性。设计模式是解决特定设计问题的通用解决方案,它们被总结为可以重复使用的模板。在面向对象技术中,设计模式是提高软件质量和开发效率的关键...

    软件开发和服务项目价格构成及评估方法

    1. **成本驱动法**:基于开发过程中预计的直接和间接成本,加上合理的利润,来确定软件价格。 2. **市场比较法**:通过分析市场上类似软件或服务的价格,结合自身产品特点进行定价。 3. **价值定价法**:基于软件...

    软件工程基础试卷及答案

    软件工程基础试卷及答案是中南大学软件工程基础试卷及答案,涵盖了软件工程的基本概念、软件生命周期、需求分析、设计模式、测试、软件开发模型等知识点。 一、填空题 1. 瀑布模型是以文档为驱动、适合于大型软件...

    软件体系结构复习题

    软件体系结构架起了软件需求与软件设计之间的桥梁,确保设计能够满足需求。 - C: 软件实现与软件测试之间的桥梁不是软件体系结构的主要作用。 - D: 软件测试与软件实施之间的桥梁也不是软件体系结构的主要作用。 ...

    软件设计师资料算法讲义

    6. **回溯法与分支限界法**:这两种方法常用于解决组合优化问题,如八皇后问题、N皇后问题、旅行商问题等,通过试探性的选择和撤销来寻找满足条件的解。 7. **数据结构**:包括数组、链表、栈、队列、堆、树...

    软件工程名词解释汇总.docx

    软件复用是指在新的软件开发项目中重用已有的软件组件、代码或设计模式等,以降低开发成本和提高开发效率。软件复用是提高软件生产力的关键手段之一。 #### 10. 内聚 内聚是一个模块内部各组成部分之间关联程度的...

    计算机科学技术系实验室实验项目总表.pdf

    本实验项目总表涵盖了计算机科学技术系的多个领域,包括基本编程方法、框架程序设计、网页设计、数据库管理、应用程序开发、体系结构与编程、设计模式、面向对象程序设计、语言程序设计、技术与应用、项目管理、架构...

    软件体系结构知识总结

    #### 十、设计模式 - **基本成分**:模式名称、问题、解决方案和后果。 - **分类**:创建性模式、结构性模式和行为性模式。 #### 十一、基于体系结构的软件开发过程 - **阶段划分**:实验原型阶段和演化开发阶段...

    软件工程期末考试简答题汇总.doc

    其五个层次包括用例、领域模型、设计模式、接口和实现,四个局部涉及分析、设计、实现和测试。 软件工程的目标是提高软件的质量和生产效率,主要问题包括需求变更、软件复杂性、成本控制和时间限制等。 软件工程...

    PHP.Architect,nanobooks,.PHP.Architects.Guide.to.PHP.Design.Patterns.(2005).LotB

    设计模式是软件工程中的通用解决方案,用于解决在特定场景下反复出现的问题。它们提供了经过验证的、可重用的结构和行为模板,使得开发人员能够更快地解决问题,并创建出更灵活、更易于维护的代码。在PHP开发中,...

    《软件工程》课后答案

    ### 软件工程基础知识详解 ...以上内容涵盖了软件工程领域的多个关键知识点,包括可行性研究、开发模式的演变、需求分析、软件工具的发展、环境集成等方面,有助于深入理解软件工程的基本原理和技术方法。

    Java EE 8 Design Patterns and Best Practices

    6. 版权和责任:在描述的末尾部分,提到了版权信息和免责声明,这说明了这本书以及所含内容是受版权法保护的,并且作者和出版方不对因使用本书内容而产生的任何直接或间接损害负责。这表明了在应用书中的知识和实践...

    UML和模式应用学习笔记

    面向对象的分析与设计是软件开发过程中的关键步骤,它涉及到如何将现实世界的问题映射到计算机系统的模型中。在这一过程中,UML(统一建模语言)和设计模式起着至关重要的作用。UML是一种标准的图形化表示法,用于...

    UML和模式应用(架构师必备).part02.rar

    26.2 一些GRASP原则是对其他设计模式的归纳 26.3 设计中发现的“分析”:领域模型 26.4 工厂(Factory) 26.5 单实例类(GoF) 26.6 具有不同接口的外部服务问题的结论 26.7 策略(GoF) 26.8 组合(GoF)和...

    一种基于单片机的智能充电器的设计与实现.pdf

    本文以单片机AT89C51为核心,详细介绍了一种基于单片机的智能充电器的设计过程和实现方法,涉及了多模式充电技术、PWM软件控制技术、电压/电流检测技术以及MOS管驱动技术等关键知识点。 首先,文章概述了智能充电器...

Global site tag (gtag.js) - Google Analytics