本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2024-11(3)

【设计原则1】——迪米特法则

发布于2021-03-13 14:10     阅读(882)     评论(0)     点赞(8)     收藏(3)


迪米特法则

什么是迪米特法则?

迪米特法则(Law of Demeter)又叫作最少知识原则,最少知道原则(The Least Knowledge Principle),一个对象应当对其他对象有尽可能少的了解,只和朋友通信,不和陌生人说话。英文简写为: LOD。

是“朋友”的情况

1)当前对象本身(this)

2)以参量形式传入到当前对象方法中的对象

3)当前对象的实例变量直接引用的对象

4)当前对象的实例变量如果是一个聚集(比如说List< Node >),那么聚集中的元素也都是朋友

5)当前对象所创建的对象

不是“朋友”的情况

class A{
	public B getB() {
		return new B();
	}
}
class B{
	public  void methodB() {
		
	}
}
public class NotFriendsTest {
     public  void test() {
    	 A a=new A();
    	 B b=a.getB(); //这个时候通过a调用方法返回的b就不是朋友
    	 b.methodB();//这个时候就不符合  
    	 changeFriends(b);  //只能再写一个方法把b作为参数传入调用b的方法
     }
     public void changeFriends(B b) {
    	 b.methodB();
     }
}

例子

电脑关机

违反迪米特原则的写法

public class Person {
    public static void main(String[] args) {
		Computer computer=new Computer();
		computer.closeProcess();
		computer.closeScreen();
		computer.outage();
	}
    

}
class Computer{
    public void closeProcess() {
		System.out.println("关闭进程");
	}
    public void closeScreen() {
    	System.out.println("关闭屏幕");
    }
    public void  outage() {
    	System.out.println("断电");
    }
}

正确写法

public class Person {
    public static void main(String[] args) {
		Computer computer=new Computer();
		computer.close();
	}    
}
class Computer{
	 public  void  close() {
		 closeProcess();
		 closeScreen();
		 outage();
	 }
	 private void closeProcess() {
			System.out.println("关闭进程");
		}
	 private void closeScreen() {
	    	System.out.println("关闭屏幕");
	    }
	 private void  outage() {
	    	System.out.println("断电");
	    }

}

优点

  • 减低类的耦合,每个类尽量减少对其他类的依赖
  • 容易使模块的功能独立,相互之间不存在或者很少有依赖关系

缺点

  • 会产生大量的小方法,这些方法只是为了传递间接的调用,和业务逻辑无
    关。
  • 局部设计简化,但是会使不同模块的通信效率降低,不易协调。

原文链接:https://blog.csdn.net/PoemLemon/article/details/114683412



所属网站分类: 技术文章 > 博客

作者:哦哦好吧

链接:http://www.javaheidong.com/blog/article/114424/87bf1c4d189c267569de/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

8 0
收藏该文
已收藏

评论内容:(最多支持255个字符)