软件架构与模式(依赖注入 控制反转 依赖倒置原则 开闭原则 单一职责原则 接口隔离原则 里氏代换原则)

名词解释:

  依赖:  一个独立元素的变化会影响到相关的元素

  派生:  一个类是由其他类衍生出的,子类继承了基类的结构(属性的名词和类型)方法

  抽象:  去掉每个不重要的细节,专注于重点内容

  关联:  描述了连接的规则,用于连接两个或多个对象(对象是同级别的

  组合:  关联的一个特例,它描述的是整体与其局部的关系,局部的存在和整体的存在相关联,一个局部只属于一个唯一的整体

  聚集:  聚集表达的是部分与整体的关系,说明部分与整体在生存期没有关联

  角色:  a):代理人 b):实现一个过程   

          在关联和角色设计模式中,每一个对象可以承载一个角色,对象可以实现角色定义的接口,对外实现角色的功能

  委托: 委托是一种结构,一个对象收到一条信息后,并不是自己实现全部方法,而是把消息继续传递下去

===============================================================================

  耦合:  子系统间相互影响的程度

  内聚性: 即内部的相互依赖程度或者子系统内部相互合作的程度

===============================================================================

  依赖倒置原则(Dependence Inversion Principle): 一个高一级的类不依赖低一级的类,高一级的类应聚集了一个接口或者抽象类,这个抽象类或接口应该由高一级的类决定,低一级的类应该依赖于这个抽象类或者接口

===============================================================================

  控制反转(IOC):程序运行时原先掌握控制流程的程序把控制权转交给其他可复用的模块来实现

 依赖查找: 一个对象在运行时与另个对象建立链接,以便在运行时可以根据名称找到另一个对象

 依赖注入: 依赖注入和依赖查找出发点是一样的,都是避免两个相关联的对象或类具有直接依赖关系

   依赖注入的特点:依赖注入的的依赖关系是从外部得到的(被注入的), 一个对象并不像依赖查找那样主动在注册中查找链接而是被动的等待相关的关联.

依赖注入意味着对象间的链接是在运行时由一个特有的实例即容器生成的,而不是在编译时生成的

  依赖注入的优点: 通过依赖注入,一个类和其他类没有依赖关系,也不需要知道这些类的对象是如何生成的。如果累与其他类没有依赖关系,他被看作是孤立的元素,这是最易进行单元测试,如果类与其他对象不需要其他类的对象,而是在运行时通过依赖注入得到它所需要的对象的引用,就可以把这个类解耦

   依赖注入实现形式:

通过带参数的构造函数生成对象(构造注入)
通过容器的set方法确定(设值注入)
定义接口管理注入(接口注入)
===============================================================================

关注点分离和单一职责原则(Single Responsibility Principle):

   每个类只包含一个职责,所有方法都应该为了实现该职责。要修改一个类的职责,只涉及该类,如果一个类包含多个职责,要修改其中的一个职责,则可能会影响该类里其他职责的实现,所以要求每个方法只能包含一个职责,只有当相应的功能要求发生改变时,方法才被改变

接口隔离原则(Interface Segregation Principle)

把大的接口分解成小的接口,用小的接口来满足不同客户端的要求,客户端只包括它使用的接口,这样可以防止客户端对它不需要的接口有依赖性

里氏代换原则(Liskov Substitution Principle)

在程序中使用对象的多态性,就是把程序中指向派生类实例的引用当做指向基类实例的引用,派生类中覆写的方法必须遵守与其他使用这个派生类的类之间的契约,也就是说不能违反基类中这个方法的前置条件,后置条件和类的不变式

开闭原则(Open Close Principle)

定义:模块应该是开放的和闭合的

解释:

1).模块应该是开放的含义是说明其实可扩展的。例如。可以添加新的模块或数据项。在不改变代码和类的原始接口的情况下,类应该具有适应性并且可以略作改动。可以通过下面的方法进行扩展:

a): 静态继承
b): 动态使用聚类
2).如果模块以不可改变的形式在库的框架内供其他模块使用,模块就是闭合的。这说明模块是稳定的,可复用的

猜你喜欢

转载自blog.csdn.net/weixin_43870026/article/details/85263649