# 设计模式 ## 软件设计的原则 ### 开闭原则 定义:软件实体应当对扩展开放,对修改关闭。 ### 里氏替换原则 定义:继承必须保证确保超类所拥有的性质在子类中仍然成立。即子类在继承父类时,除了添加新的方法来新增功能外,尽量避免重写父类方法,因为这会导致整个继承体系的复用性变差。 ### 依赖倒置原则 定义:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。其核心思想是要面向接口编程,而不是面向实现编程,这样可以降低耦合性,提高系统稳定性,提高代码的可读性和可维护性。 ### 单一职责原则 定义:一个类应该有且仅有一个引起它变化的原则,否则应类应该被拆分。其核心思想是控制类的粒度大小、提高类的内聚性。 ### 接口隔离原则 定义:一个类对另一个类的依赖应该建立在最小的接口上。其核心思想是要为每个特定的功能建立对应的接口,而不是在一个接口中试图去包含所有功能,既要保证相对独立,也要避免过多接口所导致的臃肿。 ### 迪米特法则 (最少知道原则) 定义:如果两个软件实体不需要直接通讯,那么就应该避免直接互相调用,而是通过第三方转发该调用,从而降低耦合度,保证模块的相对独立。 ### 合成复用原则 (组合复用原则) 定义:应该优先使用组合、聚合等关联关系来实现复用,其次才是考虑使用继承关系。 ### 总结 开闭原则是总纲,它告诉我们要对扩展开放,对修改关闭;里氏替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要面向接口编程;单一职责原则告诉我们实现类要职责单一;接口隔离原则告诉我们在设计接口的时候要精简单一;迪米特法则告诉我们要降低耦合度;合成复用原则告诉我们要优先使用组合或者聚合关系复用,少用继承关系复用。 ## 二、工厂模式