Java设计模式2之七大设计模式

一.开闭原则

  • 一个软件实体如类,模块和函数应该对拓展开放,对修改关闭。
  • 用抽象构建框架,用实现拓展细节。
  • 优点:提高软件系统的可复用性和可维护性。
  • 为了满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键。在Java、C#等编程语言中,可以为系统定义一个相对稳定的抽象层,而将不同的实现行为移至具体的实现层中完成。在很多面向对象编程语言中都提供了接口、抽象类等机制,可以通过它们定义系统的抽象层,再通过具体类来进行扩展。如果需要修改系统的行为,无须对抽象层进行任何改动,只需要增加新的具体类来实现新的业务功能即可,实现在不修改已有代码的基础上扩展系统的功能,达到开闭原则的要求。

初始:

image

重构后:

image

二.依赖倒置原则

  • 高层模块不应该依赖低层模块,二者都应该依赖其抽象
  • 抽象不应该依赖细节,细节应该依赖抽象
  • 针对接口编程,不要针对实现编程
  • 依赖倒置原则要求我们在程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层类,即使用接口和抽象类进行变量类型声明、参数类型声明、方法返回类型声明,以及数据类型的转换等,而不要用具体类来做这些事情。为了确保该原则的应用,一个具体类应当只实现接口或抽象类中声明过的方法,而不要给出多余的方法,否则将无法调用到在子类中增加的新方法。
  • 优点:可以减少类间的耦合性,提高系统稳定性,提高代码可读和可维护性,可降低修改程序所造成的风险。

初始:

image

重构后:

image

三.单一职责原则

  • 不要存在多于一个导致类变更的原因
  • 一个类/接口/方法只负责一项职责
  • 优点:降低类的复杂度,提高类的可读性,提高系统的可维护性,降低变更引起的风险。

四.接口隔离原则

  • 用多个专门的接口,而不使用单一的总接口,客户端不应该依赖它不需要的接口。
  • 一个类对一个类的依赖应该建立在最小的接口上。
  • 建立单一接口,不要建立庞大臃肿的接口。
  • 尽量细化接口,接口中的方法尽量少。

五.迪米特法则

  • 迪米特法则又叫作最少知识原则(Least Knowledge Principle,简写 LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。
  • 尽量降低类与类之间的耦合。
  • 优点:降低类之间的耦合。

六.合成/聚合复用原则

  • 合成/聚合复用原则经常又叫做合成复用原则,就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新的对象通过这些对象的委派达到复用已有功能的目的。他的设计原则是:要尽量使用合成/聚合,尽量不要使用继承。
  • 尽量使用对象组合,而不是通过继承来达到复用的目的。

七.里氏替换原则

  • 在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。
  • 例如:我喜欢动物,那我一定喜欢狗,因为狗是动物的子类;但是我喜欢狗,不能据此断定我喜欢动物,因为我并不喜欢老鼠,虽然它也是动物。
  • 里氏代换原则是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。

猜你喜欢

转载自blog.csdn.net/greenjoe/article/details/83097710