`
vineet
  • 浏览: 19233 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

[转]23种设计模式全解析-概要

 
阅读更多

一、设计模式的分类

总体来说设计模式分为三大类:

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下:

 

二、设计模式的六大原则

总原则:开闭原则(Open Close Principle)

开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类等,后面的具体设计中我们会提到这点。

1、单一职责原则

不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,如若不然,就应该把类拆分。

 

2、里氏替换原则(Liskov Substitution Principle)

里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。—— From Baidu 百科

历史替换原则中,子类对父类的方法尽量不要重写和重载。因为父类代表了定义好的结构,通过这个规范的接口与外界交互,子类不应该随便破坏它。

 

3、依赖倒转原则(Dependence Inversion Principle)

这个是开闭原则的基础,具体内容:面向接口编程,依赖于抽象而不依赖于具体。写代码时用到具体类时,不与具体类交互,而与具体类的上层接口交互。

 

4、接口隔离原则(Interface Segregation Principle)

这个原则的意思是:每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分。使用多个隔离的接口,比使用单个接口(多个接口方法集合到一个的接口)要好。

 

5、迪米特法则(最少知道原则)(Demeter Principle)

就是说:一个类对自己依赖的类知道的越少越好。也就是说无论被依赖的类多么复杂,都应该将逻辑封装在方法的内部,通过public方法提供给外部。这样当被依赖的类变化时,才能最小的影响该类。

最少知道原则的另一个表达方式是:只与直接的朋友通信。类之间只要有耦合关系,就叫朋友关系。耦合分为依赖、关联、聚合、组合等。我们称出现为成员变量、方法参数、方法返回值中的类为直接朋友。局部变量、临时变量则不是直接的朋友。我们要求陌生的类不要作为局部变量出现在类中。

 

6、合成复用原则(Composite Reuse Principle)

原则是尽量首先使用合成/聚合的方式,而不是使用继承。

分享到:
评论

相关推荐

    概要设计说明书实例(网上书店)

    详细解析概要设计模式的设计步骤,体系结构很清晰!

    csv转换:将csv文件转换为更容易解析的格式(例如,awk)

    CSV-CONVERT(1)-通用命令手册姓名csv转换-将csv文件转换为更容易解析的格式概要csv转换描述csv-convert实用程序在其标准输入上获取一个“ csv”文件,并以一种可由awk(1)之类的工具更轻松地对其进行解析的方式...

    asp.net知识库

    SQL Server数据库安全规划全攻略 .net通用数据库访问组件SQL Artisan应用简介1 在Framework1.0下同时连接SqlServer和Oracle的一些体会 XML XPath XPath最通俗的教程(ZZ) XPath中相对路径和绝对路径 XPath 简单语法...

    全国计算机等级考试二级Python真题及解析(4).doc

     数据库设计中,反映用户对数据要求的模式是 A 内模式 B设计模式 C外模式 D概念模式 正确答案: C 6. 在数据库设计中,用E- R图来描述信息结构但不涉及信息在计算机中的表示的阶段是 A概念设计阶段 B逻辑设计阶段...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料;本资料仅用于学习。 【课程内容】 第1周 开课介绍 python发展介绍 第一个python程序 变量 字符编码与二进制 字符编码的区别与介绍 用户交互程序 if ...

    微信小程序(跑腿类)源码9个

    内容概要:通过深入分析跑腿类微信小程序源码,读者将了解到微信小程序在跑腿业务中的核心实现逻辑。在源码解析过程中,我们会摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:订单处理、用户定位...

    jg:Jeff Goldblum(jg)是一个命令行JSON处理器。 jg在json输入中搜索结构模式,并打印与该模式匹配的每个json对象

    这是用于日志文件和流式结构化数据的有用格式: : 概要jg [ -^ cfimnqv ] [ -e模式] [ -f文件] [ -时的颜色] [模式]描述jg实用程序搜索任何给定的输入文件,选择正确解析为有效JSON并匹配一个或多个选择器模式的行。...

    小型船舶智能移动导航系统的设计.pdf

    文章简述了小型船舶智能移动导航系统在电子海图上叠加多元异构数据以及云服务存储等方面的技术运用以及两种电子海图的显示方式:瓦片图切片和矢量电子海图解析。并介绍了小型船舶智能移动导航系统应具备的功能。最后...

    python入门到高级全栈工程师培训 第3期 附课件代码

    第23章 01 re模块之转义字符 02 re模块之分组 03 re模块之方法 04 re模块总结 05 logging模块 06 re模块补充 07 configparse模块 08 hashlib模块 09 计算器作业以及思路 10 模块导入补充 第24章 01 面向对象设计 ...

    虚拟机组建局域网.doc

    1 需求分析 一台win7 PC上安装win2008虚拟机,把现实机与虚拟机建在同一局域网中,在虚拟机中创建DHCP、 DNS、 FTP服务器,提供现实机相关服务 2 概要设计 通过网桥方式组建局域网,在虚拟机上配置有DHCP服务器,DNS...

    JSP 程序设计从入门到精通 PDF 教程

     8.1.2 学生课绩管理系统的概要设计 201  8.1.3 学生课绩管理系统的详细设计 202  8.2 数据库设计 207  8.2.1 创建数据库 207  8.2.2 数据表设计 208  8.3 数据连接 213  8.3.1建立数据库连接 213  ...

    Visual C# 2005程序设计自学手册 随书源码第一部分(共三部)

    Visual C# 2005 程序设计自学手册 *****是随书源码光盘***** *****人民邮电出版社***** **长春明日科技组织编写** 本书从初学者角度出发,通过通俗易懂的语言和大量生动典型的实例,由浅入深、循序渐进地介绍使用...

    如何用一个实例来探讨嵌入式软件架构设计

    近公司新招了一个做嵌入式软件开发开发的童鞋,...1)MCU初始化2)I2C数据存取3)SPI数据读取4)加速度计初始化5)蓝牙模块启动6)BC95模块启动7)485通讯模块启动2.2.2应用层1)Mcu运行模式切换2)震动及倾斜3)数据解析4)开/关

    Tcl_TK编程权威指南pdf

    我们当时正在设计一种名为Sprite的网络操作系统。同学们在努力编制一个新式的内核程序,而John编写了一个新的编辑器和终端仿真程序。他使用Tcl作为这两种工具的命令语言,这样用户就可以定义菜单或者对那些程序进行...

    大数据培训课程安排.pdf

    JDBC、线程、反射、Socket编程、枚举、泛型、设计模式 1. 描述如下: 称为Java基础,由浅⼊深的技术点、真实商业项⽬模块分析、多种存储⽅式的设计 与实现。该阶段是前四个阶段最最重要的阶段,因为后⾯所有阶段的都...

    IIS6.0 IIS,互联网信息服务

    以及引入了命令行工具 Appcmd.exe ,给 Web 服务器的日常管理、监视和配置提供了除图形接口外的另一种方式,更为简单、高效。 同Windows XP一样,在Windows Vista的默认设置下,IIS (Internet 信息服务) 7.0未予安装...

    Visual C++音频/视频处理技术及工程实践 (分卷1)

    12.2.4 SSE程序设计详细解析 457 12.3 使用MMX/SSE 2进行音视频开发 463 12.3.1 开发前技术准备 464 12.3.2 MMX/SSE 2视频编解码编程 465 12.3.3 使用VC调试MMX/SSE 2程序 470 12.4 MMX/SSE 2开发常见问题 472 ...

    Visual C++音频视频处理技术及工程实践(分卷0)

    12.2.4 SSE程序设计详细解析 457 12.3 使用MMX/SSE 2进行音视频开发 463 12.3.1 开发前技术准备 464 12.3.2 MMX/SSE 2视频编解码编程 465 12.3.3 使用VC调试MMX/SSE 2程序 470 12.4 MMX/SSE 2开发常见问题 472 ...

    Visual C++ 音频/视频 处理技术及工程实践(分卷3)

    12.2.4 SSE程序设计详细解析 457 12.3 使用MMX/SSE 2进行音视频开发 463 12.3.1 开发前技术准备 464 12.3.2 MMX/SSE 2视频编解码编程 465 12.3.3 使用VC调试MMX/SSE 2程序 470 12.4 MMX/SSE 2开发常见问题 472 ...

Global site tag (gtag.js) - Google Analytics