经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
设计模式七大原则(1.2)
来源:cnblogs  作者:noneplus  时间:2019/8/12 9:14:31  对本文有异议

什么是设计模式原则?

设计模式原则是设计设计模式的原则,也就是设计模式应当如何设计所遵守的原则;换句话说,设计模式的设计是基于设计模式原则的。


设计模式的七大原则

  • 单一职责原则
  • 接口隔离原则
  • 依赖倒置原则
  • 里氏替换原则
  • 开闭原则
  • 迪米特原则
  • 合成复用原则

设计原则核心思想

设计原则的目的是构建出更加稳定和健壮的软件。而像这样的软件要求

  • 松耦合
  • 可扩展性强

1.单一职责原则(SRP Single Responsibility Principle)


什么是单一职责原则?

一个类只负责一项功能。

单一职责原则的目的

通过降低类的复杂度从而提高类的可读性,可扩展性

单一职责的粒度(类与方法)

通常情况下遵守单一职责原则是在类的粒度上的,但是当代码逻辑足够简单的情况下,可在方法上保持单一职责原则。



2.接口隔离原则


接口与接口隔离

接口的作用之一是规范类,实现类的松耦合,进而实现软件的松耦合。

换句话说,接口隔离也是一种单一职责原则的实现。

接口隔离原则的目的

接口隔离原则的要求就是明确接口功能,尽可能细分接口。

接口的细化直接导致整个系统灵活性,但同时会带来结构的复杂性。

比如说预先定义了10个接口,为了满足接口隔离而将接口分成20个。那么类在实现接口上会变得更加灵活,但接口的增多会导致结构的复杂性。



3.依赖倒置原则


依赖于抽象,不要依赖于具体。


依赖倒置的是什么?


类与类之间依赖变为类对接口的依赖。
[from 百度百科] ![](https://img2018.cnblogs.com/blog/1401585/201908/1401585-20190810211858121-1079952537.png)

目的

解耦,增强模块复用性。

依赖倒置原则的思想与Spring IOC容器机制相呼应,类对于接口的依赖降低了类之间的耦合性,而IOC中类对于容器的依赖同样解决了类之间高耦合的问题。


依赖关系传递的三种方式

  • 接口传递
  • 构造方法传递
  • setter传递
  1. //接口传递
  2. interface Car
  3. {
  4. void drive();
  5. }
  6. interface Person
  7. {
  8. void lunch(Car car);
  9. }
  10. //构造方法传递
  11. interface Bicycle
  12. {
  13. void ride();
  14. }
  15. class Tom
  16. {
  17. private Bicycle bicycle;
  18. Tom(Bicycle bicycle)
  19. {
  20. this.bicycle=bicycle;
  21. }
  22. }
  23. //setter方法传递
  24. interface Weather
  25. {
  26. void sun();
  27. }
  28. class Today
  29. {
  30. private Weather weather;
  31. public void setWeather(Weather weather) {
  32. this.weather = weather;
  33. }
  34. }


4.里氏替换原则


继承的利与弊

利:实现了代码重用,更加方便的实现了功能扩展。 弊:增强了类之间的耦合性


什么是里氏替换原则?

在子类中尽量不要重写父类的方法。

如果不得不重写,可提取出基类共同继承。另外也可通过聚合,依赖,组合的方式替代继承。

  1. class A
  2. {
  3. public void a1(){
  4. }
  5. public void a2(){
  6. }
  7. }
  8. class B extends A
  9. {
  10. @Override
  11. public void a1()
  12. {
  13. }
  14. }
  15. //提取基类后
  16. class Base
  17. {
  18. public void a2
  19. {
  20. }
  21. }
  22. class A extends Base
  23. {
  24. public void a1(){
  25. }
  26. }
  27. class B extends Base
  28. {
  29. public void a1(){
  30. }
  31. }


5.开闭原则(OCP Open Closed Principle)


什么是开闭原则?

对扩展开放,对修改关闭。

通俗的说,在软件功能需要扩展时,尽量增加代码,而不是修改原有代码。


for example

  1. abstract class Action
  2. {
  3. abstract public void action();
  4. }
  5. class Describe
  6. {
  7. public void describe(Action action)
  8. {
  9. action.action();
  10. }
  11. }
  12. class A extends Action
  13. {
  14. public void action()
  15. {
  16. System.out.println("跑步");
  17. }
  18. }
  19. class B extends Action
  20. {
  21. public void action()
  22. {
  23. System.out.println("瑜伽");
  24. }
  25. }
  26. class C extends Action
  27. {
  28. public void action()
  29. {
  30. System.out.println("健身");
  31. }
  32. }
  33. class X extends Action
  34. {
  35. public void action()
  36. {
  37. System.out.println("xxx");
  38. }
  39. }
  40. public class Main
  41. {
  42. public static void main(String[] args)
  43. {
  44. Describe describe = new Describe();
  45. describe.describe(new A());
  46. describe.describe(new B());
  47. describe.describe(new C());
  48. describe.describe(new X());
  49. }
  50. }

定义一个抽象类,其中有action方法,ABC类都有各自的行为,继承抽象类后重写方法。这些需要扩展新功能时只需新加一个像X一样的类就可以了。基本上不需要修改任何位置,只是扩展了功能。


6.迪米特原则(最少知识原则)


什么是迪米特原则?

一个对象应该对其他对象保持最少的了解。


表现形式

只与直接的朋友通信。

直接的朋友:除了出现在局部变量的类之外,都是直接朋友。

换句话说:迪米特法则要求局部变量中最好不要出现陌生的类。

目的

降低类之间的耦合。(耦合只能尽量降低,无法消除)


7.合成复用原则

尽量使用合成/聚合代替继承。

合成/聚合:某种类与类之间建立联系的方式。其耦合度低于继承。




参考资料: 设计模式之六大原则——接口隔离原则(ISP) 依赖倒置原则 面向对象原则之一 依赖倒置原则 对依赖倒置原则(DIP)及Ioc、DI、Ioc容器的一些理解 里氏替换原则

原文链接:http://www.cnblogs.com/noneplus/p/11333038.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号