`

设计模式学习系列之一——简介

 
阅读更多

设计模式,是在特定条件下,解决某一特定问题的方法或方式,是经过长期的经验积累而来。

    给一个正式的定义:设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。

    使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

    毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。

    GoF的“设计模式”是第一次将设计模式提升到理论高度,并将之规范化,书里提出了23种基本设计模式,自此,在可复用面向对象软件的发展过程中,新的大量的设计模式不断出现。

    长话短说,我们先来看看软件设计方面所追寻的几个基本原则:

    1, “开-闭”原则:人们总是希望自己设计的东西具有可扩展性,在软件领域里就是希望不修改源代码的情况下改变模块的行为。简言之:对扩展开放,对修改关闭。“开-闭”原则是最根本的原则,其他原则是实现它的不同路径,是从其他角度对“开-闭”原则的描述。

    2, 里氏代换原则:如果有一个基类适用于某一个接口,则其子类必然也适用。这是多态的基础,也是继承复用的基石,子类代替基类对系统没任何影响时,基类才能真正被复用,而子类才能在基类的基础上增加新的行为。

    3, 依赖倒转原则:要依赖抽象接口编程,不要依赖具体实现编程。其实就是应当使用抽象接口来进行变量的类型声明、参量的类型声明、方法的返回类型声明,以及数据类型的转换等,而不应当使用具体实现。

    4, 接口隔离原则:使用多个专门的接口,比使用单一的总接口要好。从客户类的角度来讲:一个类对另一个类的依赖性应当是建立在最小的接口上的。

    5, 单一职责原则:只能让一个类有且仅有一个职责,这也是单一职责原则的命名含义。换句话说,如果一个类需要改变,改变它的理由永远只有一个。如果存在多个改变它的理由,就需要重新设计该类。也就是永远不要让一个类存在多个改变的理由。

    6, 合成/聚合复用原则:尽量使用合成/聚合,不要使用继承。

    7, 迪米特法则:一个对象应当对其他对象有尽可能少的了解。通俗点就是不要跟陌生人说话。

    其实上面的那些原则主要是为了达到以下目的:

    1.少写重复代码

    2.尽量不修改已经完成的代码

    3.如果要增加功能,最好是通过添加新的类,而不是修改现有代码。

    4.一定要修改的话,也要容易修改,并且不会或尽量少影响到其他。

    5....

    设计模式就是教我们如何在前辈们的经验上,写出可以满足上面条件的代码。

    现在都是面向对象了,所以主要考虑的都是基于对象的重用。

    使用一个对象分为4步:

    1.定义这一类对象的通用模版----类(Class)

    2.创建/取得一个对象

    3.操作这个对象的方法以改变对象状态

    4.销毁这个对象。

    定义对象的模版时,就要考虑各类对象之间的复杂关系和结构,来描述一些复杂的事务,当然就是结构模式了。

    如何创建一个对象自然就是创建模式。

    操作对象呢就是行为模式了。

    销毁一个对象比较容易,但是会经常忘,小心点就是了,其模式大概不多。很多语言已经内置了垃圾收集器,自动帮我们照料这些琐事。

    创建模式比起其他两个稍微简单一点,我们下一节就从创建模式说起。

    

附录:

设计包的原则:

    1. 发布/重用等价原则(REP)我们创建包的目的是为了给别人重用,所以重用的粒度就是发布的粒度。
    2. 公共闭合原则(CCP) 因为相同原因而被修改的类应该放入一个包中,对应于“单一责任原则”。
    3. 公共重用原则(CRP)应该尽可能地将只被一个客户使用的包与被多个不同客户使用到的包分开。对应于“接口隔离原则”
    4. 非循环依赖原则(ADP)不要在包依赖图中出现循环依赖。如a依赖于b, b依赖于c,同时c又依赖于a。
    5. 稳定依赖原则(SDP)要依赖于稳定的包,而不要依赖于经常变化的包。对应于“依赖倒置原则”。
    6. 稳定抽象原则(SAP)稳定的包应当是抽象的。对应于“依赖倒置原则”。

分享到:
评论

相关推荐

    《HeadFirst设计模式》学习伴侣

    你不想重新发明轮子(或者更差的是,漏气的轮子),所以你从设计模式中寻求协助——设计模式是过去人们面对同样的软件设计问题所学来的经验。有了设计模式,你就可以利用他人实践经验的精华,省下的时间可以用在……...

    从模式讲到设计模式再到面向对象设计模式

    它不能实现一次创建一系列相互依赖对象的需求,为此我们需要学习抽象工厂设计模式。  打个比方:我想买一个移动硬盘,那么我只要告诉你硬盘工厂生产一块120G的移动硬盘就可以了!至于你工厂内如何生产,那不是我...

    asp.net知识库

    深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述的补白 asp.net 运行机制初探(httpModule加载) 利用反射来查看对象中的私有变量 关于反射中创建类型实例的两种方法 ASP.Net应用程序的多进程模型 NET委托...

    百度地图毕业设计源码-Design-Patterns:设计模式

    本章系Java之美[从菜鸟到高手演变]系列之设计模式,我们会以理论与实践相结合的方式来进行本章的学习,希望广大程序爱好者,学好设计模式,做一个优秀的软件工程师! 企业级项目实战(带源码)地址: 23种模式java实现...

    设计模式系列

    系列一——数据库常用模式最近在研究架构的时候,一直有一个问题围绕着我,就是这些架构虽然好,但并不是有了好的架构软件开发质量就会提高,软件就会美观更贴近艺术。我感觉,要想开发出好的软件,架构、在架构之...

    抽象工厂模式 源代码

    ——探索设计模式系列之三 Terrylee,2005年12月12日 概述 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作。如何应对这种变化?如何绕过...

    百度贴吧签到网站源码Java-dp:dp

    百度贴吧签到网站源码Java dp 返回主页 maowangI ...本章系Java之美[从菜鸟到高手演变]系列之设计模式,我们会以理论与实践相结合的方式来进行本章的学习,希望广大程序爱好者,学好设计模式,做一个优秀的

    高级java笔试题-ShareSomeSitesAndTools:android之路必备工具,必上网站,必读书籍系列

    《Android源码设计模式》作者 Mr.Simple 维护的社区网站 —— 大量第三方控件基地 —— OsChina —— android经典开源代码分享 —— 分享Android/IOS/Swift开发和互联网内容 —— 安卓demo聚集地,部分源码需购买VIP...

    [新概念C语言].李一波.扫描版

    C语言作为非计算机专业大学生一门系列课程,现在仍然是绝大多数院校的主要基础课程之一,是非计算机专业大学生算法语言教学的主要载体。C语言以它的功能丰富、表达能力强、使用灵活、应用面广、目标程序效率高、可...

    UML基础、案例与应用(第三版)].施穆勒.扫描版_2分.pdf

    1.7 这不仅仅是一系列图 16 1.8 小结 17 1.9 常见问题解答 17 1.10 小测验和习题 18 1.10.1 小测验 18 1.10.2 习题 18 第2章 理解面向对象 20 2.1 无处不在的对象 20 2.2 一些面向对象的概念 22 2.2.1 抽象 22 ...

    第一个C#程序Hello World

    比如,它的代理事件模式是一种非常搞的设计概念东西,本人觉得它:接口不象接口,抽象类不象抽象类的,搞了一种什么来自于Callback的概念--唉,无语。。。 总结:如果你能看代码逻辑,那么表示你的C#学得不错,只...

    夏昕.深入浅出Hibernate

    主要研究领域:敏捷过程、设计模式、业务建模。译著:《零缺陷编程》、《UML业务建模》。  曹晓钢,从小热爱计算机屏幕上蹦出的一个字符,感受到其中的无穷乐趣,遂勤学不缀,尤喜对数据结构与算法的学习,项目实战...

    TCP.IP路由技术[第二卷](CCIE职业发展系列).pdf

    即在讨论完主题基础知识之后,辅之以一系列能充分展现现实网络世界中各种概念的配置案例。并通过各种经过验证的故障检测与排除方法来解决网络中可能出现的各种问题。本书不但可以帮助广大读者在自己的名字之后获得极...

    自己动手写操作系统(含源代码).part2

    设计与实现》来学习操作系统的读者,本书尤其适合作为你的引路书籍,因为它翔实地介绍了初学者入门时所必需的知识积累,而这些知识在《操作系统:设计与实现》一书中是没有涉及的,笔者本人是把这本书作为写操作系统...

    自己动手写操作系统(含源代码).part1

    设计与实现》来学习操作系统的读者,本书尤其适合作为你的引路书籍,因为它翔实地介绍了初学者入门时所必需的知识积累,而这些知识在《操作系统:设计与实现》一书中是没有涉及的,笔者本人是把这本书作为写操作系统...

Global site tag (gtag.js) - Google Analytics