软件架构设计及编程思想-初稿

123 阅读6分钟

软件开发设计基石

image.png

1 高内聚,低耦合是一切软件架构设计的指导思想

2 设计原则,是在高内聚低耦合的指导下,提取出来的基本方针。

3 设计模式是基于设计原则上人们总结出来的具体实现

高内聚,低耦合

内聚指的是模块内部代码之间的关系,耦合是指模块之间的关系

高内聚

指模块内部代码的相似程度。模块内部之间关联性越强,越是高内聚。反之是低内聚。

低耦合

指模块之间的依赖程度。各个模块之间,耦合越少,则称之为低耦合。

设计原则

在软件设计中,有一些重要的设计原则,它们是一些通用的指导原则,有助于产生可维护、可扩展、可重用的高质量软件。以下是一些常见的设计原则:

  1. 单一职责原则(Single Responsibility Principle,SRP):

    • 一个类应该只有一个引起变化的原因,即一个类应该只有一个职责。
  2. 开放封闭原则(Open-Closed Principle,OCP):

    • 软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。可以通过添加新的代码来扩展功能,而不是修改已有的代码。
  3. 里氏替换原则(Liskov Substitution Principle,LSP):

    • 子类型(子类或派生类)必须能够替换掉它们的基类型(基类或父类)。
  4. 依赖倒置原则(Dependency Inversion Principle,DIP):

    • 高层模块不应该依赖于底层模块,两者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。
  5. 接口隔离原则(Interface Segregation Principle,ISP):

    • 不应该强迫一个类实现它用不到的接口。一个类对其他类的依赖应该建立在最小的接口上。
  6. 合成/聚合复用原则(Composition/Aggregation Reuse Principle,CARP):

    • 尽量使用合成/聚合,尽量不要使用继承。通过将对象组合在一起实现新功能,而不是通过继承。
  7. 迪米特法则/最小知识原则(Law of Demeter,LoD):

    • 一个对象应该对其他对象保持最少的了解。一个类应该对其成员变量、方法参数、方法返回值等局部范围内的变量保持最少的了解。

这些设计原则通常被认为是面向对象设计和编程的基石,它们有助于提高代码的质量、可读性、可维护性,并促使开发人员编写更加灵活和可扩展的软件。在实际项目中,遵循这些原则有助于创建健壮、可维护且易于理解的代码。

类之间关系

image.png

设计模式

设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。设计模式可以分为三个主要分类:

  1. 创建型模式(Creational Patterns):

    • 单例模式(Singleton Pattern): 确保一个类只有一个实例,并提供一个全局访问点。
    • 工厂方法模式(Factory Method Pattern): 定义一个用于创建对象的接口,但由子类决定要实例化的类是哪一个。
    • 抽象工厂模式(Abstract Factory Pattern): 提供一个接口,用于创建相关或依赖对象的家族,而不需要指定具体类。
    • 建造者模式(Builder Pattern): 将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。
    • 原型模式(Prototype Pattern): 通过复制现有对象来创建新对象,而不是从头开始创建。
  2. 结构型模式(Structural Patterns):

    • 适配器模式(Adapter Pattern): 将一个类的接口转换成客户期望的另一个接口。
    • 桥接模式(Bridge Pattern): 将抽象部分与它的实现部分分离,使它们可以独立变化。
    • 组合模式(Composite Pattern): 将对象组合成树形结构以表示"部分-整体"的层次结构。
    • 装饰器模式(Decorator Pattern): 动态地给一个对象添加一些额外的职责,就增加功能而言,装饰模式比生成子类更灵活。
    • 外观模式(Facade Pattern): 提供了一个统一的接口,用于访问子系统中的一群接口,使得子系统更容易使用。
    • 享元模式(Flyweight Pattern): 运用共享技术有效地支持大量细粒度的对象。
    • 代理模式(Proxy Pattern) 代理模式是一种结构型设计模式,用于提供对其他对象的间接访问,以控制对这些对象的访问。代理模式的核心思想是引入一个代理对象,该代理对象可以代替其他对象执行特定的操作,同时可以控制或增强这些操作。
  3. 行为型模式(Behavioral Patterns):

    • 责任链模式(Chain of Responsibility Pattern): 使多个对象都有机会处理请求,从而避免请求的发送者与接收者之间的耦合关系。
    • 命令模式(Command Pattern): 将一个请求封装成一个对象,从而可以用不同的请求对客户进行参数化。
    • 解释器模式(Interpreter Pattern): 给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
    • 迭代器模式(Iterator Pattern): 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。
    • 中介者模式(Mediator Pattern): 用一个中介对象来封装一系列的对象交互。
    • 备忘录模式(Memento Pattern): 在不破坏封装的情况下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
    • 观察者模式(Observer Pattern): 定义一种一对多的依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。
    • 状态模式(State Pattern): 允许一个对象在其内部状态改变时改变它的行为。
    • 策略模式(Strategy Pattern): 定义一系列算法,将每个算法都封装起来,并使它们之间可以互换。
    • 模板方法模式(Template Method Pattern): 定义一个算法的骨架,而将一些步骤延迟到子类中。
    • 访问者模式(Visitor Pattern): 表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。