`
lemonhandsome
  • 浏览: 10126 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

浅谈设计模式(概述)

阅读更多
本文是我对设计模式的个人观点,仅用来抛砖引玉:
设计模式,用比较书面化的语言来定义,如下:
是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

这种定义,让专家来看可能会理解,但让初学设计的人员来看,或许太抽象,太模式,看完点头,回头犯愁,依然不知从何下手

首先列举在设计中常用的相关词汇,然后分别作解释:
1、高内聚,低耦合(High cohesion,Low coupling)
2、设计原则( Design principles )
3、设计模式( Design pattern )
4、框架(framework)
5、泛化(实现,继承),组合,聚合,关联
6、复用性,可扩展性,易维护性

我个人对这些名词作了一个总结如下:
内聚与耦合是很基础的两个概念,凡设计均要考虑(理论)
怎样做到高内聚,低耦合,这时就有指导方法,即设计原则(方法)
看完设计原则,不太明白怎么实现,实例说明,这些实例就是设计模式(实例)
模式有了,就需要有应用层的封装,即框架(某方面的产品)
内聚,耦合主要是类与类,模块与模块的关系,这些关系都有什么呢,有泛化(实现,继承),组合,聚合,关联.,你怎样定义这些关系,决定了程序的内聚和耦合度(涉及到的关系)
最终目的达到好的扩展性,高复用性,易维护性(目的)


下面我对这些概念再做一下解释,并举例说明:
高内聚:内聚就是一个模块内各个元素彼此结合的紧密程度,所谓高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。
低耦合:一个完整的系统,模块与模块之间,尽可能的使其独立存在。
也就是说,让每个模块,尽可能的独立完成某个特定的子功能(从这里可以看出内聚高,本身就可以降低耦合)

这个理论很简单,但其实要具体情况具体分析,正如有人用下象棋形容做设计一样,即使你知道马走日,象走田,炮打一溜烟这种基本步骤,但要想下好象棋是需要大量更复杂的理论和经验的
内聚和设计原则中的单一职责一个道理,都是让本方法,本类,本模块的职责颗粒度最合适就好,如,
不够高内聚的例子有几种:
1、我们写个鸭子类,却有一个耕地的方法(根本不靠谱的设计)
2、我们写个鸭子类,里面有个疗伤的方法(看似也可以,但其实这个疗伤交给一个兽医类,可能更好,疗伤需要的参数可能是接口animal)
3、`我们有个Member会员类,有个属性叫登陆次数lTimes,本类有一个计数方法calTimes(),这种设计本无可厚非,但如果我们分析还有一个商品Production的类,里面有个属性叫点击次数hTimes,里面仍然有个计数方法calTimes(),这种设计就不太有内聚性了,我们可以将两个类中的calTimes()提到一个公共类出做calTimes(int times),这样显得Member与Production类显得更具有内聚性(可参考设计模式中的策略模式)
不够低耦合的例子有很多种,我认为大部分设计模式都是用来降低耦合的
但降低耦合可以表现在两个方面:
1、消除不恰当的依赖
2、通过其它方式依赖,可参考倚赖倒置原则

分享到:
评论

相关推荐

    Java设计模式 版本2

    Java设计模式,目录:前言,UML建模技术,深入浅出UML类图,从招式与内功谈起——设计模式概述,面向对象设计原则,工厂三兄弟之简单工厂模式,工厂三兄弟之工厂方法模式,工厂三兄弟之抽象工厂模式,确保对象的唯一...

    浅谈Android设计模式学习之观察者模式

    概述 观察者模式又被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自

    基于“互联网 ”服务链创新模式浅谈大众心理倾诉服务平台APP的设计与实现.pdf

    "基于“互联网 +”服务链创新模式浅谈大众心理倾诉服务平台APP的设计与实现" 本文主要讨论了基于“互联网 +”服务链创新模式的大众心理倾诉服务平台APP的设计与实现。该平台旨在普及心理健康知识,让用户更容易从...

    嵌入式系统/ARM技术中的浅谈低功耗概述及特性优势

    概述  由于功耗敏感应用大幅增加,加上功率预算日益紧张,低的系统功耗已成为越来越多应用的需要。当今,FPGA技术更多地用于低功耗设备,这使得降低系统功耗成为日益重要的挑战。近年来,FPGA因为采用了能降低成本...

    浅谈电动汽车CAN总线诊断设计.pdf

    本文概述了电动汽车CAN总线诊断设计的设计过程,包括诊断标准、诊断拓扑结构、诊断服务和诊断参数等方面的内容。该设计基于ISO 15765和UDS标准,旨在解决电动汽车诊断系统设计中的挑战。 一、诊断标准概述 诊断...

    design-pattern-java.pdf

    基础知识 基础知识设计模式概述 从招式与内功谈起——设计模式概述(一) 从招式与内功谈起——设计模式概述(二) 从招式与内功谈起——设计模式概述(三) 面向对象设计原则 面向对象设计原则之单一职责原则 面向...

    浅谈步进电机细分驱动技术-步进电机细分驱动技术原理

    概述了以电流矢量恒幅均匀旋转原理为基础的步进电机细分技术,设计了基于单片机的SPWM控制的电流矢量恒幅均匀旋的细分驱动模式,并通过对软件数据的设置可以实现多种细分级数驱动控制。想要更多步进电机细分驱动技术、...

    asp.net知识库

    也谈 ASP.NET 1.1 中 QueryString 的安全获取写法 ASP.NET运行模式:PageHandlerFactory 利用搜索引擎引用来高亮页面关键字 网站首页的自动语言切换 应用系统的多语言支持 (一) 应用系统的多语言支持 (二) 自动...

    浅谈网络化数据采集系统

     随着计算机网络技术的发展和人们对数据采集系统的规模、数据处理速度和资源共享要求的不断提高,测控系统的设计也由单设备模式向多设备分布测量模式发展,成为具有互操作性、网络化、开放性、分散性、智能化的测控...

    程序设计方法学资料,国防工业出版社

    第4节 浅谈面向对象设计语言 习题 第5章 程序正确性证明 第1节 概述 第2节 不变式断言法 第3节 子目标断言法 第4节 公理化方法 第5节 良序集方法 第6节 计数器方法 习题 第6章 结构化程序的正确性证明 第1节 正确性...

    基于Android APP个性化移动学习平台下的翻转课堂教学模式研究.pdf

    浅谈高速公路隧道清洗的效率安全问题[J]. 华东公路, 2008, 2: 32-33. [2] 曹彬乾, 程远增, 孙书鹰, 张佩超. 基于 STM32 步进电机多细分控制的设计[J]. 科学技术与工程, 2013, 23: 6893-6897. [3] 孙林军, 贺锋涛....

    ASP.NET3.5从入门到精通

    3.12.2 为什么要使用设计模式 3.12.3 改装现有类 3.13 小结 第 4 章 ASP.NET 的网页代码模型及生命周期 4.1 ASP.NET 的网页代码模型 4.1.1 创建ASP.NET 网站 4.1.2 单文件页模型 4.1.3 代码隐藏页模型 4.1.4 创建ASP...

    ASP.NET 3.5 开发大全11-15

    3.12.2 为什么要使用设计模式 3.12.3 改装现有类 3.13 小结 第4章 ASP.NET的网页代码模型及生命周期 4.1 ASP.NET的网页代码模型 4.1.1 创建ASP.NET网站 4.1.2 单文件页模型 4.1.3 代码隐藏页模型 4.1.4 创建ASP.NET ...

    ASP.NET 3.5 开发大全

    3.12.2 为什么要使用设计模式 3.12.3 改装现有类 3.13 小结 第4章 ASP.NET的网页代码模型及生命周期 4.1 ASP.NET的网页代码模型 4.1.1 创建ASP.NET网站 4.1.2 单文件页模型 4.1.3 代码隐藏页模型 4.1.4 创建ASP.NET ...

    ASP.NET 3.5 开发大全1-5

    3.12.2 为什么要使用设计模式 3.12.3 改装现有类 3.13 小结 第4章 ASP.NET的网页代码模型及生命周期 4.1 ASP.NET的网页代码模型 4.1.1 创建ASP.NET网站 4.1.2 单文件页模型 4.1.3 代码隐藏页模型 4.1.4 创建ASP.NET ...

    ASPNET35开发大全第一章

    3.12.2 为什么要使用设计模式 3.12.3 改装现有类 3.13 小结 第4章 ASP.NET的网页代码模型及生命周期 4.1 ASP.NET的网页代码模型 4.1.1 创建ASP.NET网站 4.1.2 单文件页模型 4.1.3 代码隐藏页模型 4.1.4 创建ASP.NET ...

    ASP.NET 3.5 开发大全word课件

    3.12.2 为什么要使用设计模式 3.12.3 改装现有类 3.13 小结 第4章 ASP.NET的网页代码模型及生命周期 4.1 ASP.NET的网页代码模型 4.1.1 创建ASP.NET网站 4.1.2 单文件页模型 4.1.3 代码隐藏页模型 4.1.4 创建ASP.NET ...

    我的编程感悟(中文PDF)(共37M二分卷)分卷二

    6.1 浅谈代码优化 138 6.2 并不仅仅是汇编 139 6.2.1 在算法实现时减少上下文的依赖关系 139 6.2.2 低效的静态变量 140 6.2.3 数据的组织 141 6.2.4 消除除法 142 6.2.5 避免过大的循环 144 6.3 汇编和C/C++的混合...

    我的编程感悟(中文PDF)(共37M二分卷)分卷一

    6.1 浅谈代码优化 138 6.2 并不仅仅是汇编 139 6.2.1 在算法实现时减少上下文的依赖关系 139 6.2.2 低效的静态变量 140 6.2.3 数据的组织 141 6.2.4 消除除法 142 6.2.5 避免过大的循环 144 6.3 汇编和C/C++的混合...

    计算机网络病毒安全论文.docx

    浅谈网络传播计算机病毒机理及防御 【摘要】网络已逐渐成为人们日常生活中不可替代的重要部分,但在网络时代到来的同时,基于网络传播的计算机病毒己经成为计算机网络安全的最主要的威胁。本文基于此,首先分析了...

Global site tag (gtag.js) - Google Analytics