LSP
子类必须能够替换基类,具有较弱的前置条件和较强的后置条件,尽量从抽象类而非具体类继承
- 子类就是一个父类,父类能够出现的地方子类一定能够出现。
- 父类能够完成的功能子类也能够完成.
内在含义
- 子类可以实现父类的抽象方法,但是不能覆盖父类的非抽象方法.【核心观念】
- 子类中可以增加自己特有的方法.
- 前置条件放大, 子类在重载父类的已实现方法时,方法的前置条件(形参)范围应该比父类更加宽松.
- 后置条件缩小,子类在实现父类的抽象方法时,方法的后置条件(返回值)范围应该比父类更加严格或相同.
里氏替换原则通俗的来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。
比较器
- Comparator:外部比较器,需要实现compare()方法,对外部传入的两个类进行比较,从而让外部方法在比较时调用
- Comparable:内部比较器,需要实现compareTo()方法,传入一个外部参数进行比对
设计模式
结构模式
- 事件适配器(Adapter)
- 允许具有不兼容接口的类通过将自己的接口包装到已有类的接口中而一起工作
- 继承适配器等于继承了一个空的监听器接口,只需重写自己需要实现的即可
- Decorator:动态地添加/覆盖对象的现有方法中的行为,如:noodle + egg
- Façade:定义一个更高层的接口,为大量代码提供简化的界面
行为模式
- Strategy:允许在运行时即时选择一个算法族中的一个
- 迭代器(iterator)
- 依次访问对象的元素而不暴露其底层表示
- iterable:一个集合对象要表明自己支持迭代,必须为foreach语句提供一个迭代器,这个迭代器是用Iterable接口定义的 iterator方法提供的