数据结构研究的是针对具体问题的算法,设计模式是面向应用开发的一种策略。
设计模式实际上就是编程方式和习惯,是经验的总结,这和生活习惯类似,如果拥有好的生活习惯,你就会很健康,在其他人眼里也会很好,而如果生活习惯不好,时间不顾虑,这当然没什么问题(自我感觉良好),但可能会对自己的健康和其他的方面带来影响(有时会很大)。
设计模式也一样,虽然不使用任何设计模式也可以写任何的软件,但是这就相当于没有好的生活习惯一样,会给这些系统带来很大的麻烦,就象一个人的烟隐很大,长期下去,得肺癌的几率要比不吸烟的人大得多。 而使用设计模式来实现软件,就相当于拥有好的生活习惯,这样会使整个软件系统得到良性的发展。设计模式不是必须的,但拥有它使用生活变得更美好。
设计模式后面的道理是软件的设计原则
开闭原则 OCP(Open-Closed Principle): 对扩展开放,对修改关闭. 抽象和接口是关键.
里氏代换原则 LSP(Liskov Substitution Principle): 如果对于每一个类型为T1的对象o1,都有类型为T2的对象o2, 使得以T1定义的所有程序P在所有对象o1都代换为o2时, 程序P的行为没有变化, 那么类型T2是类型T1的子类型。反过来代换不成立。
依赖倒转原则DIP(Dependence Inversion Principle): 第一种表述是,抽象不应当依赖与细节,细节应当依赖与抽象;第二中表述是,要针对抽象和接口编程,不要针对实现编程。
接口隔离原则ISP(Interface Segregation Principle): 使用多个专门的接口比使用一个单一的总接口要好。
合成/聚合复用原则CARP(Composite/Aggregate Resue Principle): 在一个新对象里面使用一些已经有的对象,使之成为新对象的一部分;新的对象通过向这些对象委派达到复用已有功能的一部分。这个设计原则的另一种表述是:要尽量使用合成/聚合,而不要使用继承。
迪米特法则LoD(Law of Demeter): 又叫做最少知识原则,就是说一个对象应该尽量少的知道另一个对象。它的两外几种表述: 只与你直接的朋友通信;不要跟陌生人说话。