本文标题为何叫小菜学习设计模式,缘由是本文内容主要是学习《大话设计模式》时的笔记摘要部分,固然,并非记录书中小菜的学习过程,这个彻底没有意义,而是指本人学习设计模式的成长之旅。编程
真诚的但愿本身可以从一名小菜成长为一名大鸟!
设计模式
编写的程序应该知足:
学习
1)可维护
spa
2)可扩展设计
3)可复用
orm
4)够灵活
对象
废话少说,言归正传,设计模式原则之:里氏替换原则
继承
里氏替换原则:一个软件实体若是使用的是父类的话,那么必定适用与其子类,并且它察觉不出父类对象和子类对象的区别。也就是说,在软件里面,把父类都替换成它的子类,程序的行为没有变化。接口
子类型必须可以替换掉他们的父类型。it
只有当子类能够替换其父类,软件单位的功能不受到影响,父类才能真正被调用,而子类也可以在父类的基础上增长新的行为。
因为子类型的可替换性才使得使用父类类型的模块在无需修改的状况下就能够扩展,其实也就是对内关闭,对外开放。
里氏替换原则实际上是在诠释依赖倒转原则,依赖倒转能够说是面向对象设计的标志,用哪一种语言编写程序不重要,若是编写时考虑的是如何针对抽象编程而不是针对具体细节编程,即便程中全部的依赖关系都是终止于抽象类或者接口,那就是面向对象的设计,不然就是面向过程化的设计。
里氏替换原则的意义在于面向对象的多态,之前以为多态就是不一样的表现形式,并且一直以为重写的多态意义不大,反而以为是重载的多态更加让人印象深入。其实面向对象的三大特征之一的多态是很是有用的,尤为是重写,由于重写的多态是一种面向抽象,然而重载的多态实际上是一种面向过程。重写是运行是才知道抽象的具体实现,重载是在程序编译时就已经决定了这个程序的具体执行。
不管是依赖倒转仍是里氏替换,两者其实都是创建在多态的基础上,经过调用通用一致的接口,然而具体的实现这是子类来完成,因此一来便于扩展,而来便于维护。
里氏替换要求了:“全部的子类都是父类,可是父类却不必定是子类”,正是由于“子类是父类”,因此调用父类(统一)的时候,经过多态转到了子类的调用,那么依赖倒转原则才会显得有意义。
那么,对于之后多个模块相互集成的时候,尽可能使用接口集成,而不要依赖具体的类来完成。
另外,说到里氏替换原则,请记住一个经典再经典不过的例子,那就是企鹅是鸟吗?生物学的角度企鹅是鸟,可是面向对象编程则企鹅不能继承鸟,缘由是根据里氏替换原则,“子类就是父类”,鸟是能够飞的,可是企鹅不会飞,因此企鹅若是继承了鸟他就不知足里氏替换原则。