>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 29001 个阅读者 刷新本主题
 * 贴子主题:  面向对象七大设计原则 回复文章 点赞(0)  收藏  
作者:flysky    发表时间:2018-09-12 06:14:42     消息  查看  搜索  好友  邮件  复制  引用

NO.1 单一职责原则(Single Responsibility Principle)
1. 定义:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。
2. 单一职责是实现高内聚,低耦合的指导方针

NO.2 开闭原则(Open-Closed Principle)
1. 定义:一个软件实体应该对扩展开放,对修改关闭。即一个模块在不修改源代码的前提下被扩展。
2. 开闭原则是可复用设计的第一块基石,是最重要的面向对象设计原则。

NO.3 里氏代换原则(Liskov Substitution Principle)
1. 定义:所有能够引用基类的地方必须能透明的使用其子类对象
2. 里氏代换是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象替换父类对象
3. 里氏代换注意问题:
● 子类的所有方法必须在父类中声明,或子类必须实现父类中声明的所有方法
● 尽量把父类设计为抽象类或接口,在声明实例时,以抽象层进行声明,运行时由子类负责实例化
● 在编译阶段,java编译器会检查程序是否符合里氏代换原则,这只是一个与实现无关,纯语法意义上的检查

NO.4 依赖倒转原则(Dependence Inversion Principle)
1. 定义:对接口编程,而非对实现编程
2. 代码要依赖于抽象层,而不要依赖于具体的实现层,针对接口、抽象类进行编程,而不要针对具体的实现类编程,将具体类放在配置文件中
3. 类之间的耦合关系:
● 零耦合关系:两个类之间没有任何耦合关系
● 具体耦合关系:两个具体类之间,由一个类对另一个具体类实例的直接引用
● 抽象耦合关系:两个类之间发生耦合关系,但至少有一个类为抽象的

NO.5 接口隔离原则(Interface Segregation Principle)
1. 定义:客户端不应依赖那些他不需要的接口,即:一旦一个接口太大,则需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。
2. 使用多个专门的接口,而不使用单一的总接口

NO.6 合成复用原则(Composite Reuse Principle)
1. 定义:尽量使用对象组合。而不是继承来达到复用目的
2. 通过继承来实现复用称为“白箱”复用
通过组合/聚合关系复用称为“黑箱”复用

NO.7 迪米特法则(Low of Demeter)
1. 多种定义:
● 不要和“陌生人”说话
● 只与你的直接朋友通信
● 每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位
2. 实质:一个软件实体应当尽可能少的与其他软件实体 发生相互作用,对软件实体间的通信进行限制
3. 迪米特法则中,对于一个对象,它的朋友包括:
● 但前对象本身(this)
● 以参数形式传入到当前对象方法中的对象
● 当前对象的成员对象
● 如果当前对象的成员对象是一个集合,那么集合 中的元素也都是朋友
● 当前对象所创建的对象
4. 迪米特法则分为狭义、广义:
● 狭义迪米特:如果两个类之间不必彼此直接通信,那么这两个类就不应该发生直接的相互作用,如果其中的一个类需要调用另一个类的某一方法,可以通过第三者转发这个调用。
● 广义迪米特:对对象之间的信息流量、流向以及信息的影响的控制,主要是对信息隐藏地控制
5. 迪米特法则的主要用途在于控制信息的过载,在运用至系统时,注意事项:
● 在类的划分上,尽量创建松耦合的类
● 每一个类都应当尽量降低其成员变量、成员方法的访问权限
● 在类的设计上,只要有可能,一个类应设计成不变类
● 一个对象对其他对象的引用应降到最低


程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->输入与输出(上)
  JavaWeb开发-->使用过滤器
  JSP与Hibernate开发-->持久化层的映射类型
  Java网络编程-->Java网络编程入门
  精通Spring-->CSS过渡和动画
  Vue3开发-->Vue Router路由管理器
  Java虚拟机进行类连接的原理
  面向对象的七大原则,你知道几个?
  18 张图弄懂面试官必问的一致性哈希
  Eclipse和MyEclipse的区别
  Java设计模式中的工厂模式和策略模式范例
  小数在内存中是如何存储的?
  如何优雅地打印一个Java对象?
  超详细的Java运算符修炼手册(优秀程序员不得不知道的运算技...
  Java设计模式:抽象工厂模式
  Eclipse使用指南:Debug 配置
  Java入门实用代码:获取所有线程
  Java入门实用代码:获取本机IP地址及主机名
  Java入门实用代码: List 列表中元素的替换
  Java入门实用代码:100以内整数求和运算
  Java中用动态代理实现标准的DataSource数据源连接池
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。