- 浏览: 762318 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (241)
- 个人思考 (1)
- 数据库 (5)
- java基础 (32)
- 软件工程 (2)
- zk开源框架 (15)
- 设计模式 (25)
- javascript (12)
- css (9)
- UML (2)
- CMMI软件需求 (3)
- CMMI软件设计 (2)
- CMMI软件实现 (1)
- CMMI软件测试 (1)
- 正则表达式 (4)
- 系统日志配置 (4)
- 应用服务器 (1)
- spring (7)
- XML (6)
- java web (10)
- Ajax (3)
- RichFaces (14)
- 问题 (1)
- 评论文章 (2)
- fushioncharts (2)
- MAVN (4)
- jquery (26)
- Ext js学习 (2)
- 学习心得 (2)
- CSS兼容问题 (3)
- XSL-FOP (1)
- Quartz (0)
- OSGI (1)
- spring--security (6)
- apache tools (1)
- eclispe 小技巧 (2)
- Ant (1)
- 杂记 (1)
- spring3系列 (5)
- java cache (4)
- EffectiveJava (2)
- 代码重构 (0)
最新评论
-
psz6696:
可以说是超级简单的Demo了,可惜没有演示设值注入和构造注入两 ...
模拟spring中的ClassPathXmlApplicationContext类的实现 -
ziyourJava:
[flash=200,200][img][url][list] ...
spring security进级篇 V 自定义标签控制显示 -
ztw1122:
...
zk组件开发指南(目录) -
zjysuv:
容我说一句 在座的各位都是垃圾 spring 3.2以后的@C ...
三. spring mvc 异常统一处理 -
chengwu1201:
二 基于Spring的异常体系处理
迪米特原则(Law of Demeter)
1、迪米特原则的定义
迪米特原则也叫最少知识原则(Least Knowledge Principle, LKP)简单的说,就是如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果一个类需要调用类另一个类的某个方法的话,应当通过第三个类来转发调用。迪米特法则可以简单说成:talk only to your immediate friends。
2、迪米特原则解释
一个软件实体应当尽可能少的与其他实体发生相互作用。每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。迪米特法则减少耦合的问题,类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。也就是说,信息的隐藏促进了软件的复用。
3、迪米特原则含义
(1)、talk only to your immediate friends.只和直接朋友通信。在一个类中,出现在成员变量、方法的输入输出参数中的类被称为成员朋友类。
实例:张三李四是朋友关系,李四王五是朋友关系.张三和王五是陌生人关系,为了保证张三和王五不认识,而张三又能调用王五中的方法,通过一个李四作为中继,把张三和王五隔离开来。
//抽像的,陌生人; public interface AbstractStranger { public abstract void operation3(); } //某人;(张三) public class Someone { public void operation1(Friend friend){ AbstractStranger stranger = friend.provide(); //里氏代换; stranger.operation3(); } } //朋友;(李四) public class Friend { private AbstractStranger stranger = new Stranger(); public void operation2(){ System.out.println("operation2"); } public AbstractStranger provide(){ return stranger; } } //陌生人(王五); public class Stranger implements AbstractStranger{ public void operation3(){ System.out.println("operation3"); } }
(2)、迪米特法则就要求类“小气”一点,尽量不要对外公布太多的public 方法和非静态的public 变量,尽量内敛,
多使用private,package-private、protected 等访问权限。
实例:在软件的安装中,一个类中定义了多个步骤,同时一个类要调用此类中的方法完成安装,此时可以在客户端的类中随即地调用这些步骤,这样前边的类就定义多个public的方法,我们转换一种思路,把这些步骤方法都设置为private,同时,引入一个总的方法,在总的方法中调用安装步骤方法,避免了客户类和此类中多个方法的接触。
import java.util.Random; /** * 按照步骤执行的业务逻辑类 */ public class Wizard { private Random rand = new Random(System.currentTimeMillis()); //第一步 private int first(){ System.out.println("执行第一个方法..."); return rand.nextInt(100); } //第二步 private int second(){ System.out.println("执行第二个方法..."); return rand.nextInt(100); } //第三个方法 private int third(){ System.out.println("执行第三个方法..."); return rand.nextInt(100); } //软件安装过程 public void installWizard(){ int first = this.first(); //根据first返回的结果,看是否需要执行second if(first>50){ int second = this.second(); if(second>50){ int third = this.third(); if(third >50){ this.first(); } } } } /** * 业务组装类,负责调用各个步骤 */ public class InstallSoftware { public void installWizard(Wizard wizard){ //直接调用 wizard.installWizard(); } }
(3)、如果一个方法放在本类中,即不增加类间关系,也对本类不产生负面影响,就放置在本类中。组合/聚合与之相似。
(4)、谨慎使用Serializable。
4、迪米特原则优缺点
由于狭义迪米特法则要求当两个类不必直接通信时,进行方法调用应当由第三个类来转发调用,这样就会在系统里制造出大量的小方法,是的系统显的凌乱。
迪米特法则的知识最小化,可以使得局部的模块得到简化,但是同时也会造成模块间的通信效率降低,使模块间不容易协调。
迪米特法则讨论的是对象之间信息的流量,方向以及信息影响的控制。其主要意图是控制信息过载,这就要求一个模块一个应当尽可能将自己的内部数据和实现细节隐藏起来,也就是要求有良好的封装。
因此,在类设计上的应用优先考虑将一个类设计成不变类,即使这个类是可变的在给她的属性设置赋值方法时,也应当尽可能的吝啬,除非确实需要,否则不要对该属性增加赋值方法。尽量降低一个类的访问权限,谨慎使用Serializable,尽量降低成员的访问权限。
设计模式的门面模式(Facade)和中介模式(Mediator),都是迪米特法则应用的例子。
发表评论
-
面向对象设计原则-------总结
2015-07-14 10:55 0单一职能原则 ----- 设计类时,尽量功能单一,粒度合 ... -
MVC设计模式理解
2009-11-16 22:11 2078常常说MVC设计模式,今天抽空整理下,感觉模式这东 ... -
面向对象设计的原则------接口隔离原则
2009-10-12 15:50 2801接口隔离原则(Interface ... -
面向对象设计的原则------依赖倒置原则
2009-10-11 18:27 3635依赖倒置原则(Dependence Inversion Pri ... -
面向对象设计的原则------里氏代换原则
2009-10-11 14:21 2636里氏代换原则(Liskov Sub ... -
面向对象设计的原则------开闭原则
2009-10-10 23:09 2469开闭原则(Open-Closed Prin ... -
面向对象设计的原则------单一职责原则
2009-10-09 20:36 3271学习设计模式,自然会涉及面向对象的设计原则,面向对 ... -
观察者模式
2009-08-04 22:14 1176gaojie -
组合模式-------树形模式
2009-08-03 20:42 22581、组合模式定义 ... -
命令模式
2009-08-02 14:06 18411、Commad模式是一种对象行为模式,它可以对发送者(se ... -
适配器和外观模式的区别
2009-08-01 18:23 1402ok -
适配器模式
2009-08-01 14:43 1188适配器模式通俗的说是将两个联系不密切的类或类与接口通过另一个类 ... -
门面模式(外观模式)
2009-07-29 22:49 14751、外观模式 为子系统的一组接口提供一个一致的界 ... -
简单工厂模式、代理模式、策略模式如此相似
2009-07-21 22:34 4113最近,一直在看设计模式,感觉简单工厂模式、代理模式、策略模式、 ... -
策略模式
2009-07-19 23:01 1359今天学习策略模式。策略模式是这个样子的。定义一个接 ... -
jdbcTemplate分页封装
2009-07-16 09:17 41401.JdbcTemplateExtend.java publi ... -
单例模式完全剖析
2009-07-07 21:01 1340概要 单例模式是最简单的设计模式之一,但是对于Jav ... -
DAO设计模式
2009-07-04 11:40 2233虽然DAO模式已经有了好多的成熟的框架,但它仍然是 ... -
工厂模式与DAO模式
2009-07-02 21:17 4417工厂模式是设计模式中较简单的模式,但在项目的开发过 ... -
动态代理模式
2009-06-30 22:25 15122.动态代理类 Java动态代理类位于Ja ...
相关推荐
软件设计原则-面向对象设计七大原则.zip 面向对象和C语言完全不是一种思考问题的方式,面向对象是种哲学思想,只有明白了其核心思想,才能以不变应万变 只有吃透面向对象的七大设计原则,比如:依赖倒置原则,迪米特法则等...
面向对象设计原则是软件开发中至关重要的一环,它关乎到代码的可维护性、扩展性和复用性。本文将深入探讨这些原则,并结合实例来解释它们的重要性。 首先,我们需要理解面向对象不仅仅是编程语言中的概念,如封装、...
### 面向对象设计原则详解 面向对象设计原则是一系列指导软件开发人员构建高质量、易于维护和扩展的软件系统的准则。这些原则旨在帮助开发者创建更健壮、更灵活的系统,减少代码间的耦合度,并提高代码的重用性和...
对面向对象设计原则的总结,设计模式:“开-闭”原则,里氏代换原则、依赖倒转原则、合成/聚合复用原则、迪米特法则、接口隔离原则
面向对象设计原则总结 面向对象设计原则是软件设计中最重要的原则之一,它们是软件设计的基础和核心。面向对象设计原则的应用可以提高软件的开发效率、质量和可维护性。下面是七大面向对象设计原则的总结: 一、开...
#### 三、面向对象的设计原则 面向对象编程不仅关注具体的编程技术和技巧,还强调设计原则的应用。以下是一些重要的设计原则: 1. **单一职责原则**(Single Responsibility Principle,SRP):一个类应该只有一个...
面向对象设计原则概述 单一职责原则 开闭原则 里氏代换原则 依赖倒转原则 接口隔离原则 合成复用原则 迪米特法则
面向对象设计原则与设计模式是软件工程领域的重要组成部分,它们为构建高质量、可维护和可扩展的软件系统提供了指导方针。下面将详细阐述面向对象设计原则及其如何促进软件的复用,以及设计模式的概念。 ### 面向...
面向对象设计原则与UML简介 UML,全称为统一建模语言,是软件开发领域中一种广泛应用的标准化建模工具。由Object Management Group(OMG)于1997年发布,它提供了可视化的表示方式,用于描述、指定、构建和记录软件...
面向对象设计原则概述 单一职责 开闭原则 里氏代换原则 依赖倒转原则 接口隔离原则 合成复用原则 迪米特法则
面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心。在设计面向对象的程序的时,模式不是一定要套的,但是有一些原则最好是遵守。这些原则已知的有七个,包括:单一...
面向对象设计原则,开闭原则,迪米特法则,里氏代换,接口隔离
面向对象编程的七大原则是指在面向对象设计中所遵循的七个基本原则,它们是:开闭原则、依赖倒转原则、单一职责原则、接口隔离原则、迪米特法则、里氏替换原则和组合优于继承原则。 1. 开闭原则(Open-Closed ...
本篇文章将详细探讨面向对象设计的基本原则,这些原则对于创建可维护、可扩展且易于理解的代码至关重要。 1. **单一职责原则 (Single Responsibility Principle, SRP)** - 这个原则指出,一个类应该只有一个引起它...
面向对象设计原则是指导软件工程师在设计阶段遵循的一系列准则,旨在提高软件的可维护性、可复用性和可扩展性。这些原则由多位软件设计大师总结提炼而成,如Robert C. Martin和Peter Coad等,他们认为良好的软件设计...
迪米特原则(Law of Demeter,简称LoD)是面向对象设计中的一种设计原则,源自于1987年 Northeastern University 的一个研究项目。这个原则规定了类与类之间的交互应该保持最低限度的了解,也就是说,一个对象应当只...
面向对象设计原则是软件工程领域中的一套指导思想,旨在帮助开发者设计出更易于维护、扩展和理解的软件系统。这些原则是经过多年实践总结出来的,它们不仅有助于提高代码的质量,还能促进团队之间的协作效率。接下来...
### 设计模式基础培训材料-面向对象设计原则与模式 #### 一、设计模式概览 设计模式是在软件工程领域中被广泛接受的一种用于解决常见问题的通用解决方案。这些模式通常涉及面向对象编程(OOP),并且能够帮助开发...
Java面向对象设计原则 Java面向对象设计原则是 Java 编程中的基础概念,它们是指在 Java 编程中遵循的一些基本原则,以确保编写的代码是可维护、可扩展、灵活的。这些原则包括开闭原则、里氏替换原则、单一职责原则...