设计模式学习(一):从设计原则到设计模式

简介:

说明:这些资料仅仅是对设计模式的一些总结,没有设计模式的相关知识,很难看懂。即使看懂了这些,也仅说明理解了模式的基本思想。想要学好设计模式,还是建议好好看文后所列的参考书籍和推荐书籍。

  这些总结有不少是根据自己的理解写成的,或许并不正确。如果您有不同的看法,请告知作者,谢谢!

  欢迎传阅,但是请勿随意修改或Copy。

设计模式简介

  每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。                                    

                                                                                      -- Christopher Alexander

  设计模式描述了软件设计过程中某一类常见问题的一般性的解决方案。面向对象设计模式描述了面向对象设计过程中,特定场景下,类(抽象类之间,抽象类和派生类)之间或者相互通信的对象之间常见的组织关系。

  对象是什么?

----从概念层面讲,对象是某种拥有责任的抽象。

----从规格层面讲,对象是一系列可以被其他对象使用的公共接口。

----从语言实现层面来看,对象封装了代码和数据

从设计原则到设计模式

针对接口编程,而不是针对实现编程

---- 客户无需知道所使用对象的特定类型,只需要知道对象拥有客户所期望的接口。

优先使用对象组合,而不是类继承

---- 类继承通常为“白箱复用”,对象组合通常为“黑箱复用”。继承在某种程度上破坏了封装性,子类和父类耦合度高;而对象组合则只要求被组合的对象具有良好定义的接口,耦合度低。

封装变化点

---- 使用封装来创建对象之间的分界层,让设计者可以在分界层的一侧进行修改,而不会对另一侧产生不良的影响,从而实现层次间的松耦合。

  类设计的五项原则:

  • SRP,单一职责原则,一个类应该有且只有一个改变的理由。
  • OCP,开放封闭原则,应该能够不用修改原有类就能扩展一个类的行为。类模块应该是可扩展的,但是不可修改(对扩展开放,对修改封闭)。
  • LSP,Liskov替换原则,派生类要与其基类自相容。子类必须能够替换它们的基类。
  • DIP,依赖倒置原则,依赖于抽象而不是实现。高层模块不应该依赖于低层模块,二者都应该依赖于抽象。抽象不应该依赖于实现细节,实现细节应该依赖于抽象。  
  • ISP,接口隔离原则,客户只要关注它们所需的接口。不应该强迫客户程序依赖于它们不用的方法。

 设计模式融合了上述设计原则,并提供了对常见设计问题的解决方案核心。

OO基础

  抽象,封装,多态,继承

  其中,抽象和封装是OO的基本。抽象使实际概念得以升华并工程化,从而使设计者能够使用概念视角来考查和设计复杂系统。封装用于封装系统中的各种变化(点),如内部数据和子类差异等,从而简化系统编程。多态和继承则仅仅是实现抽象和封装的必要技术,并非OO本质。

OO原则(同于类设计的五项原则)

1) 封装变化:找出应用中可能的变化点,封装易变代码,隔离稳定代码。

2) 多用组合,少用继承

3) 针对接口编程,不针对实现编程

4) 为交互对象之间的松耦合设计而努力

5) 类应该对扩展开放,对修改关闭

6) 依赖抽象,不依赖具体类. 如工厂方法(Factory Method)

7) 只和朋友交谈(墨忒耳法则):在对象的方法内,只应该调用属于以下范围的方法:a) 该对象本身; b) 被当作方法的参数传递进来的对象; c) 此方法所创建或实例化的任何对象; d) 对象的任何组件(实例变量)。

8) 别找我,我会找你(依赖倒置原则)。父类对外提供公共接口,这些接口调用子类(底层)具体实现接口。这条原则需要通过抽象方法(钩子方法)实现,如模板方法,架构类。

9) 类应该只有一个改变的理由

---------------------------------------------------

兄弟的公司:立即购--手机购物,诚信网购

兄弟的公司:立即团

欢迎转载,请注明作者和出处

本文转自 zhenjing 博客园博客,原文链接:  http://www.cnblogs.com/zhenjing/archive/2010/12/06/pritciple_design_pattern.html  ,如需转载请自行联系原作者

相关文章
|
8月前
|
设计模式 存储 关系型数据库
「全网最细 + 实战源码案例」设计模式——六大设计原则
本文介绍了面向对象设计中的六大原则,旨在提高软件系统的可维护性、可复用性和可拓展性。这些原则包括:开闭原则(OCP)、里氏代换原则(LSP)、依赖倒转原则(DIP)、接口隔离原则(ISP)、迪米特法则(LoD)和合成复用原则(CARP)。每项原则通过具体示例展示了如何通过抽象、多态、组合等方式降低耦合度,增强系统的灵活性与稳定性,从而提升开发效率并降低成本。
187 10
|
12月前
|
设计模式 Java 测试技术
Java设计模式-UML与设计原则(1)
Java设计模式-UML与设计原则(1)
102 1
|
设计模式 存储 算法
设计模式学习心得之五种创建者模式(2)
设计模式学习心得之五种创建者模式(2)
112 2
|
设计模式 uml
设计模式学习心得之前置知识 UML图看法与六大原则(下)
设计模式学习心得之前置知识 UML图看法与六大原则(下)
126 2
|
设计模式 前端开发 JavaScript
React开发设计模式及原则概念问题之什么是HOC(Higher-order component),HOC遵循的设计原则都有哪些
React开发设计模式及原则概念问题之什么是HOC(Higher-order component),HOC遵循的设计原则都有哪些
|
设计模式 算法
交易链路设计原则&模式问题之中介者(Mediator)方法设计模式是什么,如何解决
交易链路设计原则&模式问题之中介者(Mediator)方法设计模式是什么,如何解决
|
设计模式 安全 Java
【JAVA学习之路 | 基础篇】单例设计模式
【JAVA学习之路 | 基础篇】单例设计模式
|
设计模式 算法 Java
【设计模式系列笔记】设计模式与设计原则
设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 设计原则是一些通用的设计指导方针,它们提供了如何设计一个优秀的软件系统的基本思想和规则。指导着设计者如何组织代码以实现高内聚、低耦合、易扩展和易维护的软件系统。
164 4
|
设计模式 安全 Java
设计模式学习心得之五种创建者模式(1)
设计模式学习心得之五种创建者模式(1)
117 0
|
设计模式 数据可视化 程序员
设计模式学习心得之前置知识 UML图看法与六大原则(上)
设计模式学习心得之前置知识 UML图看法与六大原则(上)
140 0