面向对象进阶(一)——设计模式简介

一、模式

在一定的环境中解决某一问题的方案,包括三个基本元素——问题、解决方案和环境。

 

二、设计模式

这是一套被反复使用,多数人知晓的,经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式于他人于系统都是多赢的,设计模式使得代码编制真正工程化。

设计模式是软件工程的基石脉络,如同大厦的结构一样。

 

三、为什么学习设计模式

1、意义

提高职业素养,更深入的理解程序设计吧,之前学的感觉都是一些语法上的东西,属于皮毛。这才算开始真正的程序设计了。

2、方法

这个老师总结的就已经很到位了,对于初学者:积累案例大于背类图。这一点通过听课和看《大话设计模式》深有感触,基本上牢牢理解每个设计模式对应的典型案例,就会对这种设计模式的方式、用途、缺点有一个大致了解。

 

四、设计模式分类

1、创建型模式

通常和对象的创建有关,涉及到对象的实例化的方式。

(1)工厂方法模式:定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。

(2)抽象工厂模式:提供一个创建一系列相关或者相互依赖的接口,而无需指定它们具体的类。

(3)建造者模式:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

(4)原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

(5)单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

2、结构性模式

描述的时如何组建雷和对象以获得更大的结构。

(1)代理模式:就是为其他对象提供一种代理以控制这个对象的访问。

(2)装饰者模式:动态的给一个对象添加一些额外的职责,就增加功能来说,此模式比生产子类更为灵活。

(3)适配器模式:是将一个类的接口转换成客服希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

(4)桥接模式

(5)组合模式

(6)外拐模式

3、行为型模式

用来对类或者对象怎样交互和怎样分配职责进行描述。

(1)模板方法模式

(2)命令模式

(3)责任链模式

(4)策略模式

(5)中介者模式

(6)观察者模式

(7)备忘录模式

(8)访问者模式

(9)状态模式

(10)解释器模式

(11)迭代器模式

 

五、设计模式的基本原则

设计模式体现的是软件设计的思想,而不是软件技术,它重在使用多态与抽象类来解决各种问题。

1、开放封闭原则:(OCP原则)类的改动是通过增加代码进行的,而不是修改源代码

对于扩展是开放的,对于更改是封闭的。

面向对象设计的核心所在。遵循这个原则,可以带来面向对象技术所声称的巨大好处,也就是可维护,可扩展,可复用,灵活性好,开发人员应该仅对程序呈现出频繁变化的那部分做出抽象,然而,对于应用程序中的每个部分,都可以地进行抽象同样不是一个好主意,拒绝不成熟的抽象和抽象同样重要。

2、依赖倒置原则:依赖于抽象(接口),不要依赖具体的实现(类),也就是针对接口编程

高层模块不应该依赖底层模块,两个都应该依赖抽象。

抽象不应该依赖细节。细节应该依赖于抽象。

依赖倒转原则可以说是面向对象设计的标志,用哪种语言编写程序不重要,如果编写的时候考虑的都是如何针对抽象编程而不是针对细节编程的。即程序中所有的依赖关系都是终止与抽象类或者接口,那就是面向对象的设计了,反之就是过程化的设计。

3、接口隔离原则:不应该强迫客户的程序依赖他们不需要的接口方法,一个接口应该只提供一种对外功能

4、里氏替换原则:子类必须能替换它的父类型。

任何抽象类出现的地方都可以同他的实现类进行替换,实际就是虚拟机制,语言级别实现面向对象功能 

5、合成复用原则:如果使用继承,会导致父类的任何变化都影响到子类的行为,如果使用对象组合,就降低了这种依赖行为

6、迪米特法则:一个软件实体应当可能少地与其他实体发生相互作用

如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

迪米特法则首先强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限。

迪米特法根本思想强调了类之间的松耦合,耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。

7、单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。

如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力,这种耦合会导致脆弱的设计,当变化发生时,设计会遭到意想不到的破坏。

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/iotflh/article/details/86663089
今日推荐