设计模式(笔记)概述

来源:互联网 发布:mysql日期格式化 编辑:程序博客网 时间:2024/05/16 04:31

设计模式(笔记)概述

 参考自李建中视频

目的

解决类与相互通信的对象之间的组织关系,包括角色,职责,协作几个方面。

好处

应对变化,提高复用

 

 

概述

面向对象设计模式是独立于编程语言的。

不像算法技巧,可以照搬照用,是一些经验性的认识。首先我们要先了解什么是面向对象。

 

面向对象

三大机制

1.       封装:隐藏内部实现,隔离内部变化,外部接口是稳定的,但是内部的实现可以随需求变化而变化。

2.       继承:复用现有代码(主要的一个目的)

3.       多态:改写对象行为

 

但是这三大机制是实现层面的,是我们在进行面向对象编程时候的实现方法。这三大机制既可以做出好的设计也可以做出坏的设计。不是说使用了面向对象的语言就是面向对象设计开发了。我们不能仅仅依赖编程语言的面向对象机制来做面向对象开发。

 

面向对象原则和模式会告诉我们什么样的设计才是面向对象的。

 

从宏观来面向对象更适应软件的变化。从微观来看,面向对象更强调各个类的责任。

 

对象是什么,

概念层:对象是拥有责任的抽象。

规格层(从外部来看):对象是一些列可以被其他对象使用的公共接口。

语言实现层:对象封装了代码和数据。

 

原则

1.       针对接口编程:客户(使用你的对象的类)使用的都是接口,在使用这个对象的时候只需要知道这个对象的接口,不需要知道他得特定类型。

2.       优先使用对象组合,而不是类继承:类是白箱复用,破坏了封装,只要继承就拥有了父类的protected的属性,子类和父类的耦合度非常高。而对象组合则只要求被组合的对象具有良好的接口,耦合度低。需要区分is a和has a 的区别。非常强的is a的关系才用继承。

3.       封装变化点:使用封装来创建对象之间的分界层,让设计者可以再分阶层的一侧进行修改,而不会对另外一侧产生影响,从而实现松耦合。我们以前理解可能只是信息隐藏,但是特别重点的是变化点封装起来。

4.       使用重构得到模式:一套软件不可能直接就能先把设计完全做好。不可能一步到位。敏捷软件开发提倡使用重构得到模式。有的地方根本就不是变化点,可以就不用设计模式,不必要生搬硬套的使用设计模式。每个编程的人员都是设计人员,不要把自己和设计人员隔离开。代码在开发过程中不断的重构来得到最好的设计。

 

 

更多的设计原则:

1.       单一职责原则:一个类应该只有一个引起变化的原因。

 

2.       开放封闭原则:可扩展,但是不可修改。(对扩展开放,对更改封闭)

 

 

3.       Liskov替换原则:子类必须能够替换他的基类。用is a来判断,有的时候你觉得是一个他的子类,但是实际上不是。

 

4.       依赖倒置原则:

高层模块不应该依赖于低层模块,二者都应该依赖于抽象。常见问题就是一个类去调用一个类的时候,用了很多的if else来执行不同对象的行为。这个时候应该使用接口。

抽象不应该依赖于实现细节,实现细节应该依赖于抽象。

 

 

5.       接口隔离原则:不应该强迫客户程序依赖于他们不用的方法。

 

 

0 0
原创粉丝点击