专栏首页IT笔记分享设计模式——设计原则

设计模式——设计原则

设计原则

程序开发不仅要知道设计模式还要知道设计的原则,尽最大能力按照原则设计开发,对于代码review或者修改后期项目以及项目交接都会很方便。

一、单一职责原则

有且仅有一个原因引起类的变更。

优点:

  • 类的复杂性降低,实现什么职责都有明确的定义;
  • 可读性提高;
  • 可维护性提高;
  • 变更引起的风险降低。

二、里氏替换原则

所有引用基类的地方必须能透明使用其子类的对象。只要父类能出现的地方,子类就可以出现,而且替换子类也不会产生错误。

继承的优点:

  • 代码共享,每个子类都有父类的方法和属性;
  • 提高代码重用性;
  • 提高代码扩展性;
  • 提高产品或项目开放性。

继承的缺点:

  • 具有侵入性,子类有父类的所有属性和方法;
  • 降低代码灵活性;
  • 增强耦合性,父类中常量、变量和方法被修改时,需要考虑子类的修改。

三、依赖倒置原则

高层模块不应该依赖底层模块,两者都应该依赖其抽象,抽象不应该依赖细节,细节应该依赖抽象。

模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系通过接口或抽象类产生的。接口或抽象类不依赖于实现类,实现类依赖接口或抽象类。

四、接口隔离原则

客户端不应依赖它不需要的接口,对接口进行细化;类建的依赖关系应该建立在最小的接口上。建立单一接口,不要建立臃肿庞大的接口。而且要满足单一职责原则。

五、迪米特法则

也称最少知识原则:一个对象应该对其他对象有最少的了解。一个类应该对自己需要耦合或调用的类知道的最少。

只和直接的朋友通信:每个对象都必然与其他对象有耦合关系,两个对象间的耦合就成为朋友关系。

迪米特法则的核心观念就是类间的解耦,弱耦合。其实就是面向对象编程。

六、开闭原则

一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化。开闭原则可以提高复用性,提高维护性。

抽象约束:通过接口或者抽象类可以约束一组可能变化的行为,并且能够实现对扩展开放。

1.通过接口或者抽象类约束扩展,对扩展进行边界限定,不允许出现在接口或者抽象类中不存在的public方法。

2.参数类型、引用对象尽量使用接口或者抽象类,而不是实现类。

3.抽象层尽量保持稳定,一旦确定即不允许修改。

六大设计原则主要是Java面向对象编程设计的原则,降低项目耦合,分清职责。方便开发和继续维护。


本文分享自微信公众号 - IT笔记分享(xiaosen_javashare),作者:xiaosen L

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 设计模式(四)——代理模式

    上图中,Subject是一个抽象类或者接口,RealSubject是实现方法类,具体的业务执行,Proxy则是RealSubject的代理,直接和cli...

    小森啦啦啦
  • Java多线程学习(六)——Lock的使用

    锁是用于通过多个线程控制对共享资源的访问的工具。通常,锁提供对共享资源的独占访问:一次只能有一个线程可以获取锁,并且对共享资源的所有访问都要求首...

    小森啦啦啦
  • SpringBoot连接Elasticsearch实战总结

    第一次使用elasticsearch,于是从网上找轮子复制粘贴。早好轮子测试完毕,上线。可是几天下来发现接口响应时间一直都偏高(默认的超时时间是500ms),所...

    小森啦啦啦
  • Java中接口与抽象类的区别

    在Java中,被关键字abstract修饰的类称为抽象类;被abstract修饰的方法称为抽象方法,抽象方法只有方法声明没有方法体。 抽象类有以下几个特点: ...

    赵哥窟
  • C1第 1 节: 面向对象类的介绍和继承

    第 1 节: 面向对象类的介绍和继承 1、字段和属性可以看成是。这个对象的特征; 2、如果出现了曲线错误提示,鼠标放在那里,点击F6(或者等片刻); 3、子类...

    静心物语313
  • Java 接口理论篇

    接口的两层含义:接口作为数据类型   狭义的接口  接口的第二层含义:工具 广义的接口 在接口中所有的变量都是静态常量 在接口中所有方法都是抽象方法 定义一个接...

    房上的猫
  • java代码设计的6+1大原则

    1.开闭原则(Open Close Principle) 定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。 开放-封闭原则的意思就是说,你...

    lyb-geek
  • 吴恩达《ML Yearning》| 端到端的深度学习

    MachineLearning YearningSharing 是北京科技大学“机器学习研讨小组”旗下的文献翻译项目,其原文由Deep Learning.ai ...

    用户7282388
  • Go 语言面向对象教程 —— 接口篇:接口定义与实现

    接口在 Go 语言中有着至关重要的地位,如果说 goroutine 和 channel 是支撑起 Go 语言并发模型的基石,那么接口就是 Go 语言整个类型系统...

    学院君
  • 我闻到了 Android AppCompat 代码的坏味道!

    话说,我最近写了一个小 Demo,之前开发调试一直都是在一台 6.0.1 的手机上,顺风顺水的。

    bennyhuo

扫码关注云+社区

领取腾讯云代金券