`
webdev2014
  • 浏览: 677573 次
文章分类
社区版块
存档分类
最新评论

设计模式总结—编码原则

 
阅读更多


最近在学习设计模式,设计模式里讲到几个原则,所以今天我们就来学习下这几个原则。

首先第一个原则是——单一职责原则,故名思议就是一个事物仅让它有一个职责,让它职责单一一些,比如说MP3,我们仅仅只让它用来听音乐用、照相机只是让它来照相用,我举MP3也好照相机也好仅仅是为了让大家更好的理解什么是单一职责原则。在我们编程中,单一职责原则是说,一个类应该仅有一个引起它变化的原因,也就是让一个类实现的功能尽可能单一,如果我们在类的职责上分离上能尽可能的到位的话,我们的代码才能够做到易维护、易扩展、易复用。



第二个原则是——开放-封闭原则。开放-封闭原则表达的是两个意思,一个是说对于扩展是开放的,另一个是说对于更改是封闭的。扩展开放是说,我们所写的代码应该拥有扩展的功能,在编写代码时就要考虑将来扩展的可能性,因为需求随时都可能变更,所以我们要在原有代码的基础上,进行增加功能。而更改是封闭的是说,对代码进行需求变更是,不能对代码中已经存在的类、模块、函数等进行修改,需求变更是通过增加新代码而不是更改原有的代码。

开放-封闭原则是面向对象的核心所在,绝对的修改关闭也是不可能的,无论模块多么“封闭”,都会存在一些无法对之封闭的变化。针对这种情况,我们采取的办法是,先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化。但是对于程序中的每个部分不能刻意的为了抽象而去全部抽象,这也是不可缺的。



第三个原则是依赖倒转原则,A:高层模块不应该依赖低层模块。两个都应该依赖抽象。 B:抽象不应该依赖细节,细节应该依赖于抽象。也就是说,要针对接口编程,不要对实现编程。


换句话来说就是在编写代码中的类、模块、函数等时谁也不要依靠谁,让耦合性尽可能的低,除了约定的接口,大家都各自灵活自如。


依赖倒转其实可以说是面向对象设计的标志,用哪种语言来编写程序不重要,如果编写时考虑的都是如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止与抽象类或者接口,那就是面向对象的设计,反之那就成了过程化的设计了。




第四个原则是里氏代换原则,一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别,也就是说,在软件里面,把父类都替换成它的子类,程序的行为没有变化,简单的说,子类型必须能够替换它们的父类型。


正是因为有这个原则,使得继承复用成为了可能,只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。由于子类型的可替换性才使得使用父类型的模块再无需修改的情况下就可以扩展,这样使得开放-封闭能更好的实现。




第五个原则是迪米特法则,法则内容:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接打相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。


强调的是在类的结构设计上,每一个类都应当尽量降低成员的访问权限。其根本思想强调了类之间的松耦合。类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。




第六个原则是合成/聚合复用原则,尽量使用合成/聚合,尽量不要使用类继承。


好处是优先使用对象的合成/聚合将有助于你保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。


分享到:
评论

相关推荐

    设计模式面面观(10):桥接模式(Bridge Pattern)-结构型模式

    设计模式之我见(1):设计模式概述 (100%) 设计模式面面观(2):设计模式基本要素与原则 (100%) 设计模式面面观(3):单件模式(Singletion)-创建型模式 (100%) 设计模式面面观(4):工厂模式...

    java与模式源码-DesignPatterns:关于java设计模式,源码与解析

    关于设计模式中涉及的原则与模式,项目使用java编码实现设计模式。 设计模式 原则 单一职责原则 单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的原因。 如果一个类承担的职责过多,就等于把这些职责耦合...

    积分兑换系统java源码-DesignPattern:设计模式

    引入设计模式常常会增加程序复杂性,不是任何时候编码都严格遵守设计模式,而是讲究结合场景取舍,适度使用不是全部遵守。 工作过程中不经意间经常使用,但未总结过,抽时间用代码表达一下,同时让自己再加深下理解...

    asp.net知识库

    帮助解决网页和JS文件中的中文编码问题的小工具 慎用const关键字 装箱,拆箱以及反射 动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/catch语句带来的warning 微软的应试题完整版(附答案) 一个...

    《敏捷软件开发(原则模式与实践)》读书笔记

    瀑布模型式是最典型的预见性的方法,严格遵循预先计划的需求、分析、设计、编码、测试的步骤顺序进行。步骤成果作为衡量进度的方法,例如需求规格,设计文档,测试计划和代码审阅等等。瀑布式的主要的问题是它的严格...

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

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

    J2EE学习笔记

    第二章:JAVA设计模式 18 2.1:创建型设计模式 19 2.2:结构型设计模式 32 2.3:行为型设计模式 83 第三章:JAVA基本语法 118 3.1:语言基础知识 118 3.2:声明和访问控制 120 3.3:运算符和赋值 121 3.4:流程控制...

    软件工程专业 实训项目报告 宠物市场/商城管理系统

    3.1 数据库设计的基本原则 9 3.2 系统功能模块图 10 3.3 系统E-R图 10 3.4 数据库概念数据模型(CDM)设计 13 3.5 数据库物理数据模型(PDM)设计 14 3.6 数据库设计 15 第四章 系统总体设计 26 4.1 系统总体设计...

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

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

    软件工程完整ppt

    序  前言  第1篇面向过程的软件工程  第1章软件危机、 软件工程  11软件工程的发展史  111程序设计时代  112程序系统时代  113软件工程时代  12软件危机主要表现形式 ... 附录CGOF给出的软件设计模式

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

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

    从虚拟机视角谈Java应用性能优化

    本文要求读者具有一定的Java虚拟机的基础知识,一定的Java设计模式和开发经验。通过阅读本文,读者能从Java运行的本质上对性能方面有一个很好的把握,在设计和编码的过程中,遵循文中总结的原则和习惯,对于提高性能...

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

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

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

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

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

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

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

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

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

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

    专周实训进度

    为让学生体验软件设计原则与模式在实际项目中的使用,综合应用本学期所学的所有专业知识(MVC,创建型模式,结构型模式以及行为型模式),最终达到让学生理解软件的设计原则和模式,巩固学期专业知识、锻炼编码能力...

Global site tag (gtag.js) - Google Analytics