Contents
  1. 1. 软件设计原则
  2. 2. 设计模式
  3. 3. 软件应用架构

软件设计原则

  • Don’t Repeat Yourself (DRY)

  • Keep It Simple, Stupid(KISS)

  • 针对接口编程,而不是实现

  • You Ain’t Gonna Need It (YAGNI):如无必要,勿增复杂性

  • 迪米特法则 (Law of Demeter):最少知识原则

  • 面向对象的 S.O.L.I.D 原则

    • SRP单一职责原则:一个类只有一个引起变化的原因。
    • OCP开闭原则:一个软件实体应当对扩展开放,对修改关闭。
    • LSP里式替换原则:子类型必须能够替换它们的基类型。
    • ISP接口隔离原则:使用多个专门的接口比使用单一的总接口总要好。
    • DIP依赖倒置原则:高层模块不依赖于底层模块,二者都依赖其抽象;抽象不依赖于细节,细节应该依赖抽象。

软件设计读物推荐:

  • 《深入浅出设计模式》
  • 《Clean Architecture》
  • 《领域驱动设计》
  • 《实现领域驱动设计》

设计模式

  • 简单工厂模式(Factory)
    提供创建对象的接口,封装对象具体的创建过程。

  • 工厂方法模式(FactoryMethod)
    定义一个用于创建对象的接口,由子类决定将哪一个类实例化,工厂方法使一个类的实例化延迟到其子类。

  • 抽象工厂模式(Abstract Factory)
    提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

  • 观察者模式(Observer)
    定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并刷新。

  • 命令模式(Command)
    将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。

  • 策略模式(Strategy)
    定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换;本模式使得算法的变化可独立于使用它的客户。

  • 模板方法模式(TemplateMethod)
    定义一个操作中的算法骨架,而将一些步骤延迟到子类中;模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。

  • 代理模式(Proxy)
    为其他对象提供一个代理以控制对这个对象的访问。

  • 适配器模式(Adapter)
    将一个类的接口转换成客户希望的另一个接口;Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

  • 装饰器模式(Decorator)
    动态地给一个对象添加一些额外的职责,就扩展性而言,Decorator模式比生成子类方式更为灵活。

  • 单例模式(Singleton)
    保证一个类仅有一个实例,并提供一个访问它的全局访问点。

  • 组合模式(Composite)
    将对象组合成树形结构以表示部分-整体的层次结构,Composite模式使得客户对单个对象和复合对象的使用具有一致性。

  • 职责链模式(Chain of Responsibility)
    为解除请求的发送者和接收者之间的耦合,而使多个对象都有机会处理这个请求;将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。

  • 构建者模式(Builder)
    将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

  • 外观模式(Facade)
    为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这个子系统更加易于使用。

  • 桥接模式(Bridge)
    将抽象部分与它的实现部分分离,使它们都可以独立的变化。

  • 迭代模式(Iterator)
    提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示。

  • 访问者模式(Visitor)
    表示一个作用于某对象结构中的各元素的操作;它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

软件应用架构

  • 经典分层架构

    • 表示层
    • 领域层
    • 数据源层
  • Android主流应用架构

    • 经典MVC架构
    • MVP架构
    • MVVM架构
    • Clean Architecture架构
  • 软件架构模式

    • 分层架构
    • 事件驱动架构
    • 微内核架构
    • 微服务架构
    • 基于空间的架构
Contents
  1. 1. 软件设计原则
  2. 2. 设计模式
  3. 3. 软件应用架构