软件设计模式与体系结构第一节课

软件设计模式与体系结构


面向对象的基础知识

一、面向对象设计的表示方法
UML
二、面向对象的设计原则(互相依赖,互相补充)

  • 单一原则
  • 开闭原则**
  • 里氏代换原则
  • 依赖倒转原则**
  • 接口隔离原则
  • 合成复用原则
  • 迪米特法则

好的系统设计应具备的性能:

  • 可扩展性(方便添加新功能,或修改当前功能)
  • 灵活性(可依据客户不同的要求进行配置)
  • 可插拔性(增加或减少功能,不影响其他功能的应用)

软件的复用或重用:提高软件的开发效率,提高软件的质量,节约开发成本,改善系统的可维护性
可维护性复用都是一面向对象设计原则为基础的

重构:在不改变软件现有功能的基础上,通过调整程序代码改善软件质量、性能,是其程序设计模式和架构更趋合理,提高软件的扩展性和维护性。

UML

重点掌握类图及其表示方法;
类图:

  • 类封装了数据和行为
  • 类之间的关系
  • 关联关系
  • 聚合/组合关系
  • 泛化关系(继承)
  • 接口实现(接口的作用很重要)

其他辅助视图

  • 顺序图
  • 状态图

单一职责原则

一个对象应该只包含单一的职责,并且该职责完整地封装在一个类中。
单一职责原则是实现高内聚、低耦合的指导方针

开闭原则

对扩展开放,对修改关闭

在设计一个模块的时候,应当是这个模块可以在不被修改的前提下呗扩展,及在不修改源代码的情况下改变这个模块的行为。
对可变性封装原则,将系统分为可变部分和固定部分,将可变因素封装起来,扩展新的功能时改变可变部分,不会对固定部分造成影响。

里氏代换原则

第一种定义方式:如果对每一类型为s的o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代换成o2时;程度P的行为没有变换,那么类型S是类型T的子类型。

第二种定义方式:所有引用基类(父类)的地方必须能透明地使用其子类的对象。

因此在程序中尽量使用基类类型来对对象进行定义,而在运行时子确定其子类类型,用子类对象来替换父类对象

依赖倒转原则

定义

  • 高层模块不应该依赖底层模块,它们都应该依赖
  • 抽象不应该依赖于细节
  • 细节应该依赖于抽象

另一种表述

  • 要针对接口编程,不要针对实现编程。

代码要依赖于抽象的类,而不要依赖于具体的类;要针对接口或抽象类编程,而不是针对具体类编程。
实现开闭原则的关键在于抽象化,并且从抽象化具体化现实,如果说开闭原则是面向对象设计的目标的话,依赖倒转原则就是面向对象设计的主要手段。

实现方式:控制翻转在代码中使用抽象类,二而将具体的类放在配置文件中。

依赖注入:

  • 构造注入(通过构造函数注入实例)
  • 设值注入(通过Setter方法注入实例)
  • 接口注入(通过接口方法注入实例)
原文地址:https://www.cnblogs.com/zhixinlin/p/12352977.html