`

面向对象设计的原则---------迪米特原则

阅读更多

迪米特原则(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),都是迪米特法则应用的例子。

分享到:
评论

相关推荐

    软件设计原则-面向对象设计七大原则.zip

    软件设计原则-面向对象设计七大原则.zip 面向对象和C语言完全不是一种思考问题的方式,面向对象是种哲学思想,只有明白了其核心思想,才能以不变应万变 只有吃透面向对象的七大设计原则,比如:依赖倒置原则,迪米特法则等...

    面向对象设计原则.ppt

    面向对象设计原则是软件开发中至关重要的一环,它关乎到代码的可维护性、扩展性和复用性。本文将深入探讨这些原则,并结合实例来解释它们的重要性。 首先,我们需要理解面向对象不仅仅是编程语言中的概念,如封装、...

    面向对象设计原则.pdf

    ### 面向对象设计原则详解 面向对象设计原则是一系列指导软件开发人员构建高质量、易于维护和扩展的软件系统的准则。这些原则旨在帮助开发者创建更健壮、更灵活的系统,减少代码间的耦合度,并提高代码的重用性和...

    对面向对象设计原则的总结

    对面向对象设计原则的总结,设计模式:“开-闭”原则,里氏代换原则、依赖倒转原则、合成/聚合复用原则、迪米特法则、接口隔离原则

    程序员必备的七大面向对象设计原则

    面向对象设计原则总结 面向对象设计原则是软件设计中最重要的原则之一,它们是软件设计的基础和核心。面向对象设计原则的应用可以提高软件的开发效率、质量和可维护性。下面是七大面向对象设计原则的总结: 一、开...

    面向对象思想----不看后悔!

    #### 三、面向对象的设计原则 面向对象编程不仅关注具体的编程技术和技巧,还强调设计原则的应用。以下是一些重要的设计原则: 1. **单一职责原则**(Single Responsibility Principle,SRP):一个类应该只有一个...

    面向对象设计原则

    面向对象设计原则概述 单一职责原则 开闭原则 里氏代换原则 依赖倒转原则 接口隔离原则 合成复用原则 迪米特法则

    面向对象设计原则和设计模式的概念

    面向对象设计原则与设计模式是软件工程领域的重要组成部分,它们为构建高质量、可维护和可扩展的软件系统提供了指导方针。下面将详细阐述面向对象设计原则及其如何促进软件的复用,以及设计模式的概念。 ### 面向...

    UML简介与面向对象的设计原则

    面向对象设计原则与UML简介 UML,全称为统一建模语言,是软件开发领域中一种广泛应用的标准化建模工具。由Object Management Group(OMG)于1997年发布,它提供了可视化的表示方式,用于描述、指定、构建和记录软件...

    面向对象设计原则PPT

    面向对象设计原则概述 单一职责 开闭原则 里氏代换原则 依赖倒转原则 接口隔离原则 合成复用原则 迪米特法则

    面向对象设计原则源码及文档

    面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心。在设计面向对象的程序的时,模式不是一定要套的,但是有一些原则最好是遵守。这些原则已知的有七个,包括:单一...

    面向对象设计原则(Java).ppt

    面向对象设计原则,开闭原则,迪米特法则,里氏代换,接口隔离

    面向对象七大原则

    面向对象编程的七大原则是指在面向对象设计中所遵循的七个基本原则,它们是:开闭原则、依赖倒转原则、单一职责原则、接口隔离原则、迪米特法则、里氏替换原则和组合优于继承原则。 1. 开闭原则(Open-Closed ...

    面向对象设计的基本原则

    本篇文章将详细探讨面向对象设计的基本原则,这些原则对于创建可维护、可扩展且易于理解的代码至关重要。 1. **单一职责原则 (Single Responsibility Principle, SRP)** - 这个原则指出,一个类应该只有一个引起它...

    Java设计模式02面向对象设计原则

    面向对象设计原则是指导软件工程师在设计阶段遵循的一系列准则,旨在提高软件的可维护性、可复用性和可扩展性。这些原则由多位软件设计大师总结提炼而成,如Robert C. Martin和Peter Coad等,他们认为良好的软件设计...

    c#设计模式之迪米特原则

    迪米特原则(Law of Demeter,简称LoD)是面向对象设计中的一种设计原则,源自于1987年 Northeastern University 的一个研究项目。这个原则规定了类与类之间的交互应该保持最低限度的了解,也就是说,一个对象应当只...

    面向对象设计原则与设计说明

    面向对象设计原则是软件工程领域中的一套指导思想,旨在帮助开发者设计出更易于维护、扩展和理解的软件系统。这些原则是经过多年实践总结出来的,它们不仅有助于提高代码的质量,还能促进团队之间的协作效率。接下来...

    设计模式基础培训材料-面向对象设计原则与模式

    ### 设计模式基础培训材料-面向对象设计原则与模式 #### 一、设计模式概览 设计模式是在软件工程领域中被广泛接受的一种用于解决常见问题的通用解决方案。这些模式通常涉及面向对象编程(OOP),并且能够帮助开发...

    Java面向对象设计原则

    Java面向对象设计原则 Java面向对象设计原则是 Java 编程中的基础概念,它们是指在 Java 编程中遵循的一些基本原则,以确保编写的代码是可维护、可扩展、灵活的。这些原则包括开闭原则、里氏替换原则、单一职责原则...

Global site tag (gtag.js) - Google Analytics