开发者社区> 技术小美> 正文

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

简介:
+关注继续查看

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

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

  欢迎传阅,但是请勿随意修改或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 ,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
反射与工厂设计模式 | 带你学《Java语言高级特性》之八十三
通过案例逐步掌握工厂设计模式,通过工厂类获取指定接口的实例化对象。
858 0
设计模式学习——策略模式
一、介绍 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 策略模式应用的例子很多,比如最常见的Java类库中的 Comparator,它将对象的具体比较算法封装起来,我们可以根据所要比较的对象的类型自由选择。策略模式类图如下
13 0
设计模式快速学习(二)抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
830 0
设计模式学习——工厂模式
说到工厂模式,可能我们脑海中就会蹦出简单工厂、工厂方法以及抽象工厂这几个名词,但是说起他们之间的区别、各自都解决了什么样的问题,那就比较懵了,所以今天我们详细梳理下这三者之间的区别与联系。 一、简单工厂 简单工厂严格来说不能算作一种设计模式,它更像一种编程习惯,用于将具体类的创建从客户端解耦,他的实
17 0
Python语言程序设计学习 之 了解Python
Python简介   Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。   Python是纯粹的自由软件,源代码和解释器CPython遵循 GPL(GNU General Public License)协议。
1256 0
Java设计模式学习记录-备忘录模式
前言 这次要介绍的是备忘录模式,也是行为模式的一种 。现在人们的智能手机上都会有备忘录这样一个功能,大家也都会用,就是为了记住某件事情,防止以后自己忘记了。那么备忘录模式又是什么样子的呢?是不是和手机上的备忘录一样呢?下面来介绍一下。
659 0
大神之路你必须了解的——Java 设计模式
一直想写一篇介绍设计模式的文章,让读者可以很快看完,而且一看就懂,看懂就会用,同时不会将各个模式搞混。自认为本文还是写得不错的,花了不少心思来写这文章和做图,力求让读者真的能看着简单同时有所收获。
1010 0
Java描述设计模式(02):简单工厂模式
一、生活场景简介 1、引入场景 订餐流程简单描述 1)、食品抽象类,规定食品的基础属性操作 2)、鱼类,鸡肉类食品类扩展 3)、订餐流程类,根据食品名称,加工指定类型食品 4)、模拟客户端预定操作 2、源代码实现 1)、关系图谱 2)、代码实现 /** * 简单工厂模式引入场景 */ publ...
583 0
+关注
6902
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载