设计模式(0):概述

1.为什么需要设计模式

在实际工程中,即使不使用设计模式,往往也能实现相应的功能。但是这样的代码往往既不优雅,也不能很好地适应需求变更,结果就是一旦需求有变动,就需要对原有的代码进行大的修改,从而浪费很多的时间。

可见,设计模式就是一套被反复使用、基于以往设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。项目中合理地运用设计模式可以完美地解决很多问题,每种模式都有相应的原理与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。

2.设计模式的分类

总体来说设计模式分为以下三大类:

  • 1)创建型模式,共五种:工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式;
  • 2)结构型模式,共7种:适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式;
  • 3)行为型模式,共11种:策略模式,模板方法模式,观察者模式,迭代子模式,责任链模式,命令模式,备忘录模式,状态模式,访问者模式,中介者模式,解释器模式.

下面是各设计模式之间的关系图:
design_pattern

3.设计模式的六大原则

  • 1)开闭原则(Open Close Principle)
    开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果.所以一句放概括就是:为了使用程序的扩展性好,易于维护和升级.想要达到这样的效果,我们需要很好地使用接口和抽象类。
  • 2)里氏代换原则(Liskov Substitutioin Principle)
    里氏代换原则是面向对象设计的基本原则之一。里氏代换原则是:任何基类可以出现的地方,子类一定可以出现。LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
  • 3)依赖倒转原则(Dependence Inversion Principle)
    这个是开闭原则的基础,具体内容:直接对接口编程,依赖于抽象而不依赖于具体.
  • 4)接口隔离原则(Interface Segregation Principle)
    使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思。从这儿也可以看出,其实设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便。所以一直坚持的原则就是:降低依赖,降低耦合.

  • 5)迪米特法则(最少知道原则)(Demeter Principle)
    即一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。这其实就是要高内聚,低耦合.

  • 6)合成复用原则(Composite Reuse Principle)
    即尽量使用合成/聚合的方式,而不是使用继承,因为继承往往会有很大的代价.

从下一篇文章开始,我们将逐一讲解各个设计模式,并使用Java作为实例,并且还会以Android中一些优秀的源码作为示例,让大家通过实例体会到设计模式在大型工程中的作用。