一、设计思想
- 封装 (不关注细节、系统井井有条)
- 解耦 (高效开发、提高可维护性、可变性)
- 复用 (保证一致性、正确性、易于修改、提高开发效率)
二、设计原则
- SOLID原则
- SRP单一职责原则(一个类、模块只干一个职责)
- OCR开闭原则(对扩展开放、对修改关闭)
- LSP里式替换原则 (子类扩展父类、而非修改)
- ISP接口隔离原则
- DIP依赖反转原则(执行流程由框架控制)
- KISS\YAGNI原则(保持简单、不过度设计)
- DRY原则(不写重复代码)
- LOD原则:迪米特法则(最小知识原则,高内聚、低耦合)
三、设计模式(23种)
设计模式是对软件设计中普遍存在的问题所提出的解决方案。
目的是提高代码的可读性、可扩展性、复用性、可维护性等
分类 (斜体为不常用模式)
问题: 如何区分 结构型和行为型?
结构型模式描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。结构型模式可以分为类结构型模式和对象结构型模式,也可分为代理模式、适配器模式、桥接模式、装饰器模式、外观模式、享元模式和组合模式等7类
3.1 创建型
- 单例模式
- 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点
- 主要解决:一个全局使用的示例频繁的创建与销毁
- 适用于:控制实例数目,节省系统资源
- 实例:
- 工厂模式
- 意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
- 适用于:明确地计划不同条件下创建不同实例时
- 实例:
- 抽象工厂
- 意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
- 适用于:?
- 实例:
- 建造者模式
- 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示
- 适用于:一些基本部件不会变,而其组合经常变化
- 原型模式
- 意图:
- 适用于:
- 实例:
3.2 结构型
- 代理模式
- 意图:为其他对象提供一种代理以控制对这个对象的访问
- 适用于:想在访问一个类时做一些控制
- 实例:
- 桥接模式
- 意图:将抽象部分与实现部分分离,使它们都可以独立的变化
- 适用于:
- 实例:墙上的开关,可以看到的开关是抽象的,不用管里面具体怎么实现的
- 装饰器模式
- 意图:动态地给一个对象添加一些额外的职责
- 适用于:在不想增加很多子类的情况下扩展类
- 实例:
- 适配器模式
- 意图:将一个类的接口转换成客户希望的另外一个接口
- 适用于:
- 实例:美国电器 110V,中国 220V,就要有一个适配器将 110V 转化为 220V
- 门面模式
- 意图:
- 适用于:
- 实例:
- 组合模式
- 意图:
- 适用于:
- 实例:
- 享元模式
- 意图:
- 适用于:
- 实例:
3.3 行为型
- 观察者模式
- 意图:
- 适用于:
- 实例:
- 模板模式
- 意图:
- 适用于:
- 实例:
- 策略模式
- 意图:
- 适用于:
- 实例:
- 职责链模式
- 意图:
- 适用于:
- 实例:
- 迭代器模式
- 意图:
- 适用于:
- 实例:
- 状态模式
- 意图:
- 适用于:
- 实例:
- 访问者模式
- 意图:
- 适用于:
- 实例:
- 备忘录模式
- 意图:
- 适用于:
- 实例:
- 命令模式
- 意图:
- 适用于:
- 实例:
- 解释器模式
- 意图:
- 适用于:
- 实例:
- 中介模式
- 意图:
- 适用于:
- 实例:
四、面向对象
- 封装
- 抽象
- 继承
- 多态