1、项目 = 模块 + 沟通

2、设计模式扮演的角色:

帮助我们组织模块

  • 通过一些设计模式,组织模块间的组成结构

    帮助我们设计沟通

  • 有的设计模式可以帮助我们设计模块之间如何沟通

    提高代码质量

  • 通过设计模式,让代码更加优雅

    3、设计原则:

    1、开闭原则

    定义:软件实体(如:类、模块、方法)应该对扩展开放,对修改关闭。
    即当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。

    2、单一职责原则(SRP)

    定义:有且只有一个原因引起类的改变,即一个类只负责一个职责

    3、依赖倒置原则

    定义:实现类之间不发生直接的依赖关系,其依赖是通过接口或者抽象类产生的,即面向接口编程
    实现类依赖接口或抽象类,接口或抽象类不依赖实现类

    4、接口隔离原则

    定义:建立单一的接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。
    每个模块应该是单一的接口,提供给几个模块就应该有几个接口,而不是建立一个庞大臃肿的接口来容纳所有客户端的访问。
    与单一原则的不同之类: 比如一个接口的职责可能包含10个方法,这10个方法都放在一个接口中,并且提供给多个模块访问。各个模块按照规则的权限来访问,在系统外通过文档约束“不使用的方法不要访问”。按照单一职责原则是允许的,按照接口隔离原则是不允许的,因为ISP要求尽量使用多个专门的接口,而不是一个庞大臃肿的接口

    5、迪米特法则

    定义:一个对象应该对其他对象有最少的理解,即一个类应该对自己需要耦合或需要调用的类知道的最少

    6、里式替换原则(LSP)

    里式替换原则针对的是具有继承关系的父类和子类
    定义:所有引用基类的地方必须能透明地使用其子类的对象,
    也可以理解为:只要父类出现的地方,子类就可以出现;而且将其替换为子类,也不会产生任何错误或异常。
    子类必须完全实现父类的方法(方法不能为空)。即父类的方法必须是子类全部需要的,如果不是全部需要的,就违背了LSP原则。
    在勒种调用其他类是必须使用父类或者接口,如果不使用父类或者接口,则类的原则就违背了LSP原则。

    4、分类

    1、创建型

    这些设计模式可以帮助我们优雅地创建对象

    • 工厂模式-大量创建对象
    • 单例模式-全局只能有我一个
    • 建造者模式-精细化组合对象
    • 原型模式-JavaScript的灵魂

      2、结构型

      帮助我们优雅地设计代码结构

    • 外观模式-给你的一个套餐

    • 享元模式-共享来减少数量
    • 适配器模式-用适配代替更改
    • 桥接模式-独立出来,然后再对接过去
    • 装饰着模式-更优雅地扩展需求

      3、行为型

      模块之间行为的模式总结,帮助我们组织模块行为

    • 观察者模式-我作为第三方转发

    • 职责链模式-像生产线一样组织模块
    • 状态模式-用状态代替判断
    • 命令模式-用命令去解耦
    • 策略模式-算法工厂
    • 迭代器模式-告别for循环

      4、技巧型

      一些帮助我们优化代码的技巧

    • 链模式-链式调用

    • 惰性模式-我要搞机器学习
    • 委托模式-让别人代替你收快递
    • 等待着模式-等你们都回来再吃饭
    • 数据访问模式-一个方便的数据管理器