面向对象、软件设计基本原则

只记录自己的理解,对于网上通用的解释不做记录
首先是六个面向对象原则:下面是我自己的分类:根据实现方式分为两类,一类是跟多态有直接关系的、一类是无关的

  1. 单一职责、接口隔离
  2. 开闭、里氏替换、依赖倒置、迪米特
  • 对于开闭原则的理解:在要修改的时候,应该采用扩展的方式,不应该这样理解:对扩展开放、对修改关闭
  // 面向接口编程,几乎能对应到上面四个原则的实现
  Interface inf = new Class();  //或者延迟初始化,使用外部设置进来的值
  inf.xxx();
  
  // 依赖倒置原则(高层模块不应依赖于低层模块,两者应该依赖于抽象;抽象不不应该依赖于实现,实现应该依赖于抽象)
  高层模块 -> 接口 <- 底层模块

其次是DIP、IOC(DI是IOC的一种实现方式):分别是:依赖倒置、控制反转、依赖注入

  1. DIP:同上面的依赖倒置原则

  2. IOC:有三个东西:依赖方、被依赖方、依赖控制器

    1. 一般使用DI方式实现IOC。如下示例可以看出:没有基于IOC方式,card依赖由ATM本身控制,而实现了IOC之后,card依赖就不再由ATM控制了,而是由第三方来控制(第三方通过调用setCard()决定给ATM注入什么样的依赖)
      1. DI一般可以通过构造函数、或者是抽出一个接口来,对依赖进行控制,还可以由IOC容器实现
    // 示例:ATM依赖Card,没有基于IOC
    class ATM {
        private var card: Card = Card()  
    }
    
    // 基于IOC
    class ATM : IController {
        private var card: Card? = null
        override fun setCard(card: Card) {
            this.card = card
        }
    }
    

你可能感兴趣的:(面向对象、软件设计基本原则)