设计原则
|-------------|----------------------------|
| 设计原则名称 | 简单定义 |
| 开闭原则 | 对扩展开放,对修改关闭 |
| 单一职责原则 | 一个类只负责一个功能领域中的相应职责 |
| 里氏替换原则 | 子类应该能够替换父类并且不影响程序的正确性 |
| 依赖倒置原则 | 依赖于抽象,不能依赖于具体实现 |
| 接口隔离原则 | 类之间的依赖关系应该建立在最小的接口上 |
| 合成 / 聚合复用原则 | 尽量使用合成 / 聚合,而不是通过继承达到复用的目的 |
| 迪米特法则 | 一个软件实体应当尽可能少的与其他实体发生相互作用 |
XX模式违反了XX原则
1.单例模式(Singleton Pattern)
违反的原则 :单一职责原则(SRP)
原因:
单例模式通常将对象的创建和管理职责与业务逻辑耦合在一起,导致类承担了多个职责
这违反了单一职责原则,即一个类应该只有一个引起它变化的原因
2. 工厂模式(Factory Pattern)
违反的原则 :开闭原则(OCP)
原因:
工厂模式虽然提供了扩展性,但在某些情况下,添加新的产品类型可能需要修改工厂类,而不是通过扩展来实现
这违反了开闭原则,即软件实体应该对扩展开放,对修改关闭
3. 适配器模式(Adapter Pattern)
违反的原则 :接口隔离原则(ISP)
原因:
适配器模式可能会引入一个"胖接口",即一个接口包含多个不相关的方法
这违反了接口隔离原则,即客户端不应该依赖于它们不需要的接口
4. 装饰器模式(Decorator Pattern)
违反的原则 :单一职责原则(SRP)
原因:
装饰器模式通过动态添加职责来扩展对象的功能,这可能导致一个类承担过多的职责,违反了单一职责原则
5. 观察者模式(Observer Pattern)
违反的原则 :依赖倒置原则(DIP)
原因:
观察者模式中,观察者通常依赖于具体主题(Subject)的实现,而不是依赖于抽象
这违反了依赖倒置原则,即高层模块不应该依赖于低层模块,二者都应该依赖于抽象
6. 模板方法模式(Template Method Pattern)
违反的原则 :里氏替换原则(LSP)
原因:
模板方法模式通过继承来实现算法的骨架,子类必须遵循父类的行为
如果子类不正确地覆盖了父类的方法,可能会导致程序行为异常,违反了里氏替换原则,即子类应该能够替换父类并且不影响程序的正确性
7. 策略模式(Strategy Pattern)
违反的原则 :单一职责原则(SRP)
原因:
策略模式将算法的选择与使用算法的类分离,但可能会导致使用策略的类承担了过多的职责,违反了单一职责原则
8. 代理模式(Proxy Pattern)
违反的原则 :单一职责原则(SRP)
原因:
代理模式可能会将访问控制、延迟初始化等职责与业务逻辑耦合在一起
导致代理类承担了多个职责,违反了单一职责原则