现在的位置: 首页 > 综合 > 正文

体会23中设计模式的核心思想(续)

2014年11月10日 ⁄ 综合 ⁄ 共 1805字 ⁄ 字号 评论关闭

面向对象的核心:
  抽象和封装,将变化点抽象出来,封装成一个抽象类或者接口,来提高代码的应对变

化的能力(健壮性)和可扩展性。这个过程实际上有两个效果, 一是 解耦:将很多关联

类抽象到了接口或者抽象类中,在客户端,就会依赖于接口或者抽象类而不会依赖于具

体类, 这样其实就是把依赖关系从具体的依赖(强依赖或者说是强耦合)变成了对抽象

的依赖(弱依赖或者说是弱耦合),从而达到了降低耦合的目的,从而提高了系统的可

重用性和灵活性。二是 : 封装, 封装主要体现在把多个类似的类封装到抽象中。
封装是解耦的逆过程。 目的是把系统中相关的部分放在一起以便于管理。以减少系统的

复杂度和提高系统的易用性。

 

 解耦, 将一个复杂的过程分解成几个相对简单的过程,并且减少这些子过程之间的耦

合度(即:关联度)来提高系统的可重用性和灵活性,比如可以比较容易的提取出系统

中的某个松散耦合的模块,以用于其它的系统等。 解耦的实质, 就是把系统中比较复

杂的部分分解成几个比较简单的部分, 而且要保证分解以后, 各个部分尽量的减少依

赖。 同时带来的问题,就是,在客户端使用的时候, 需要由客户端来构造各个子部分

,并且建立各部分的关联(如果各部分关联很复杂,那么现在 在客户端建立关联的时候

,代码就会很复杂,所以, 解耦时,必须降低各部分的关联)。这等同于将一个大的模

块分解成很多小的模块, 在使用的时候, 由客户端来定制这些模块之间的组合,从何

大大的提高了代码的灵活性,可见解耦增加了系统的可重用性和灵活性。

 一、软件设计理论的层次

  以我的拙见,软件设计领域中的各种概念,可以分为以下几个层次来进行理解:

  1、软件设计的目的:重用性、扩展性。

  这是最高的层次,是应对软件危机的需要。

  2、设计原则:低耦合、高聚合。

  各种软件设计的原则,如依赖倒置原则、单一职则原则、面向接口等,以及各种设

计模式,其根本的目的其实只是为了降低耦合这么简单。因为只有低耦合才能更好的适

应变化,更好的重用和扩展。

  3、实现方法:运用设计模式封装变化、降低耦合。

  设计模式只是用来“封装变化、降低耦合”的工具而已。它是面向对象设计时代的

产物,其本质就是充分运用面向对象的三个特性,即:封装、继承和多态,进行灵活的

组合运用。

  二、关于耦合

  1、耦合的粒度

  耦合无论如何也是不可避免的。当我们实现接口、继承父类的时候,就会不可避免

的产生耦合。耦合是有不同粒度的,我们解耦到什么粒度为止,我认为应以模块的重用

粒度为准。尽量解除重用模块或对象之间的耦合。而重用模块之内的耦合,应属于聚合

的范畴,所以不要盲目的去解耦,否则就陷入了误区。

  2、解耦的原理

  怎样才能解耦呢,或者说为什么各种设计模式能达到解耦的目的呢?我觉得有以下几

个思路:

  (1)将具体的东西抽象处理

  (2)将分散的东西集中处理

  而面向对象中的接口、继承正为我们提供了这样的一种机制。通过访问接口或基类

或抽象类,而不是具体的实现类,从而与具体的实现类达到了解耦的目的。我们还可以

设计一些控制类,像润滑剂一样,协调各实现类之间的访问,也可以达到耦的目的。

  事实上,各种设计模式的基本思想也就是这样。创建型模式是为了解除创建对象时

产生的耦合,实际上是解除对类称名的依赖,而结构型和行为型是为了解除对象属性或

方法的直接调用。不管什么设计模式,都是将对具体实现类的访问提升为对接口、基类

或用于协调的控制类的访问。

  三、关于接口

  这一节更具体,谈一谈接口,因为使用接口是软件设计的重要手段,但已经不属于

“道”了~

  1、接口与继承

  接口描述的是对象某一个方面行为特征。使用接口与使用继承关系各有优缺点,使

用子类继承可以继承父类的功能,体现了重用的精神。而接品更加灵活,因为它解除了

子类与父类之间的高度耦合,它体现在灵活扩展的精神。

  2、接口与纯虚类

  理论上接口可以由纯虚基类实现类似的功能,那为什么还我们不去掉接口的概念,

而直接使用虚类呢?

  接口存在的理由就是它更加灵活,关系简单,易于理解。比如一个类可以实现十几

个甚至几十个接口,但一般开发工具只支持单继承(由于多继承太容易导致混乱和冲突)

,如果要继承十几层,系统结构想必会无法理解了,我以为这是接口存在的最重要的原

因。

  如果接口和虚类继承结合使用,可以产生强大的威力,这也是许多设计模式的“杀

手锏”。

  以上算是总结一下自己的心得。肯定有不少片面之处,请各位指教。

抱歉!评论已关闭.