avatar

面向对象

概述

本片博客的目的是为了深入掌握代码设计,相关的内容有uml类图,面向对象原则,设计模式等.
进一步了解这些原则和思想是为了能够在书写代码以及阅读源码时更加有效率.

uml类图

UML类图包含了6种关系

关系强弱: 泛化=实现>组合>聚合>关联>依赖

  • 其中组合,聚合,关联只能通过语义区分,在代码中体现都是成员属性(has a)
  • 方法返回值也是依赖关系,idea中依赖create表示在函数中使用new
  • 1对多使用集合和数组就能实现
  • create表示依赖关系,并创建对象
TestC
1
2
3
4
5
6
7
8
9
10
public class TestC {
private TestA testA;
private List<TestB> testBList;

public TestA test(TestA testA) {
TestA.test();
new TestA();
return null;
}
}

面向对象原则

以此图为起点,看看何时能够完全说明spring的设计
ps:此张图并不能说明图中所有接口的相关所有情况,仅仅只能说明和DefaultListBeanFactory的关系
参考

单一职责原则和接口隔离原则
  • 前者简要来说就是分离一个类|接口的功能,使得单一业务影响该类.
  • 后者指将接口分离成数个小接口
    问题和理解:
  1. 接口并不能直接实现函数,那么出现一个接口至少要提供一个抽象类或者default函数,以便让子
    类选择较为契合的功能,如ListableBeanFactory拥有多个子抽象类(图中未显示),说明spring设计
    符合接口隔离原则
  2. 接口实现可以将子接口视为统一大接口,在该过程中如何保持接口继承树的单一职责原则
开闭原则和里氏替换原则
  • 开闭原则:对象设计过程中,应保持对拓展开发,对修改关闭.
    • 拓展性和修改关闭通过继承实现,实际上就是面向接口编程
  • 里氏替换原则:出现父类调用的函数,可以完全替换成子类,并不影响其功能.
    • 重载和重写
      1
      2
      重载(overload):条件是是函数名相同,形参不同(顺序,类型,数量)
      重写(override):条件是参数相同,返回值可以缩小,修饰符大于等于父类,抛出异常小于等于父类.
    • 子类只能重新父类抽象方法(此时父类就是抽象类).
    • 子类可以新增方法.
    • 子类重载overload父类函数时,入参应该扩大.
    • 子类实现父类方法(重载/重写或者实现抽象方法)返回值要缩小.
迪米特原则(最少知道原则)
  • 降低耦合性,若A类依赖B类,可以通过B类去处理C而不是直接处理C.
  • 也可以采取依赖倒置,即A包含C类的接口进行处理.
依赖倒置和
文章作者: fancylight
文章链接: https://www.fancylight.top/2019/09/27/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 博客
打赏
  • 微信
    微信
  • 支付寶
    支付寶

评论