个人理解
- 设计原则是一种站在程序设计角度的思想,是对面向对象特点的一种延伸,是对封装、继承、多态、组合/聚合、抽象的扩展;告诉我们在程序设计时应该怎样来封装、继承、多态、组合/聚合、抽象。
- 设计模式是站在软件系统、架构、结构的角度来考虑问题,是为了让软件系统具有稳定性、健壮性、可靠性、扩展性、可维护性。
单一原则(Single Responsibility Principle)
- 一个类只负责一项职责,尽量做到类的只有一个行为原因引起变化。
- 对于封装的一种补充;
- 比如Mybatis 中的 UserDao;OrderDao 等:只负责对某一个表的增删改查;比如Spring中的配置类、请求类、缓存类 等 :只负责某一个具体(配置、请求、缓存)的功能;
接口隔离(interface segregation principle)
- 使用者不应该依赖它不需要的接口;
- 类之间依赖关系应该建立在最小的接口上,强调降低依赖,降低耦合;
- 它是对继承的扩展;
开闭原则(Open Close Principle)
- 对扩展开放,对修改关闭:
– 在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果;
– 实现:使用接口和抽象类;接口封装、抽象机制、多态的体现以及运用,比如策略模式;
里氏代换原则(Liskov Substitution Principle)
- 任何基类可以出现的地方,子类一定可以出现;
– 在程序设计的时,在继承时尽量不要重写父类的方法,在父类中定义的方法被认为是一种契约; - 在适当的时候我们可以采用聚合、组合、依赖的方式来降低耦合度;
- 实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范;
依赖倒转原则(Dependence Inversion Principle)
- 面向接口编程,依赖于抽象而不依赖于具体,解决类与类之间过度依赖;
- 比如:接口注入、构造注入(接口类型参数)、setter注入(接口类型参数);我觉得Spring IOC注入方式就是遵循了该原则;
迪米特法则,又称最少知道原则(Demeter Principle)
- 一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立;
- 一个类对于自己依赖的类知道的越少越好;即将逻辑尽量的封装在类的内部;
- 体现如何封装和应该如何组合;
合成复用原则(Composite Reuse Principle)
- 尽量使用合成/聚合的方式,而不是使用继承;
分类
- 创建型模式
– 单例模式、原型模式、工厂模式、抽象工厂模式、建造者模式 - 结构型模式
– 适配器模式、桥接模式、组合模式、外观模式、享元模式、代理模式、装饰模式 - 行为型模式
– 模板方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介模式、备忘录模式、解释器模式、状态模式、策略模式、责任链模式