设计原则(图片来自互联网,侵删)设计模式,其实只是前人针对某类问题的代码设计经验而已
设计模式应遵循的原则:
-
单一职责原则:一个类只有一个引起他变化的原因,相关性很高的函数、数据封装到一个类中。
原因:避免某块函数或数据的变化影响其他类,降低耦合度。 -
开放封闭原则(开闭原则):一个实体(类、函数、模块等)应该对外扩展开放,对内修改封闭。某实体应该易于扩展,在扩展某类的功能时应该通过添加新的代码来实现而不是修改其内部的代码。
原因:新功能经常会有,应该易于添加。但是添加新功能不能修改旧的已有功能,容易引起众多 BUG。
实现:提供一个固有的接口,让所有可能扩展的类实现该接口,需要新功能时添加接口方法。 -
里氏替换原则:子类必须可以替换掉它们的父类型。子类对象能够替换父类对象,而程序逻辑不变。
说明:也就是说,利用多态后子类强转为父类对象,子类必须能正常使用父类中的所有函数。多态让一个类(父类)拥有多种形态(子类),任何父类出现的地方都可以由子类替换并且不会出现问题。
实现:抽象类的设计。抽象类中包含抽象方法,子类继承抽象父类必须实现父类的抽象方法,这样无论哪个子类都可以执行父类中定义的抽象方法。 -
依赖倒置原则:细节应该依赖于抽象,而抽象不应依赖细节。在 Java 中,抽象一般指抽象类和接口,细节就是实现类,实现接口或继承抽象类产生的类就是细节。也就是说:简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。
"面向接口编程,而不是面向实现编程":通过接口来设置功能,具体类实现接口实现功能。
比如有三个类都实现某接口,这三个实现类都有相同的方法名但其内部实现却可以是灵活多变的,但是这三个类都可以正常调用实现方法也可以进行传递。
-
接口隔离原则:使用多个专门功能的接口,而不是单一的总接口。
原因:一个总接口体验是非常糟糕的,实现总接口总会又很多用不到的函数。 -
合成复用原则:在一个新对象里使用一些已有的对象,使之成为新对象的一部分。
原因:新对象想使用某些对象中的功能,使用一个单独的类的功能可以继承,但是多个就不可继承了。倒不如使一些对象成为新对象的一部分,就可以通过委派的形式复用现有的某些对象的功能。 -
最少知识原则(迪米特法则):一个模块或对象应该尽量少地与其他模块或对象发生相互作用,这样当一个模块修改时不会影响太多。
使用:A 有一个功能,B 想要使用,那么 A 只需要暴露一个函数或返回一个结果给 B 使用,而不是了解 A 如何实现的以及 A 包含的数据细节。
总体来说设计模式可以分为三大类:
- 创建型:单例模式、工厂模式、抽象工厂模式、建造者模式、原始模式
- 结构型:适配器模式、装饰模式、代理模式
- 行为型:模板方法模式、命令模式、迭代器模式、观察者模式、策略模式
网友评论