Java的开发—面向对象的7大原则之单一迪米特法则(六)

一.定义

迪米特法则,又叫最少知道原则(Least Knowledge Principle)

一个类应该保持对其他类最少的了解

也就是说:只与直接朋友交流,不和陌生人交流

朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们称之为朋友

耦合分为:依赖、关联、组合、聚合等等,我们称出现在成员变量、方法参数、方法返回值中的类为直接朋友,其他不是朋友。陌生类最好不要最为局部变量的形式出现在类的内部

二.示例

问题由来:

类与类之间的关系越紧密,他们的耦合度就越高,当一个类发生变化时,对另一个类的影响也越大

场景:去餐馆吃饭,点菜,然后厨师做菜,上菜

方式一:违反最少知道原则----我们使用硬编码,新建 服务员类 厨师类

逻辑:服务员让厨师做菜:服务员类中有个 创建厨师的方法,然后做菜

 1 /**
 2  * 厨师
 3  */
 4 public class Cook {
 5     public void cookFood(){
 6         System.out.println("厨师做菜");
 7     }
 8 }
 9
10 /**
11  * 服务员
12  */
13 public class Waiter {
14
15     private Cook cook;
16
17     public Cook createCook(){
18         if (null == cook){
19             cook = new Cook();
20         }
21         return cook;
22     }
23 }
24
25 public static void main(String[] args) {
26         System.out.println("waiter 我要点菜");
27         Waiter waiter = new Waiter();
28         System.out.println("厨师做下菜");
29         Cook cook = waiter.createCook();
30         cook.cookFood();
31     }

虽然菜做好了,可是客人会想,你干嘛把厨师也叫来,我点完菜,你拿过去给厨师做不就行了

改进:

方式二:遵循最少知道原则:客人只点好菜,然后上菜就行了,客人不需要和厨师说我要吃什么

/**
 * 厨师
 */
public class Cook {
    public void cookFood(){
        System.out.println("厨师做菜");
    }
}

/**
 * 服务员
 */
public class Waiter {

    private Cook cook;

    public void order(){
        createCook();
        cook.cookFood();
    }

    public Cook createCook(){
        if (null == cook){
            cook = new Cook();
        }
        return cook;
    }
}

public static void main(String[] args) {
        System.out.println("waiter 我要点菜");
        Waiter waiter = new Waiter();
        waiter.order();
    }

结果:客人只管点好菜,做好菜上来就行了,我不需要知道厨师是谁,不需要和厨师说做什么菜,不然要服务员干嘛

三.总结

优点:类间解偶,弱耦合,增加服用率

缺点:

1.在系统里造出大量的小方法和中介类,这些方法仅仅是传递间接的调用,与系统业务逻辑无关,增加了系统的复杂度

注意事项:

1.类的划分上应该 创建弱耦合的类

2.类的设计上,每个类应该降低成员的访问权限

3.在类的设计上,只要有可能,一个类尽可能设计成不变的类

4.对其他类的引用:一个类应该尽可能的降低对其他类的引用和依赖

5.尽量限制局部变量的有效范围,降低类的访问权限

原文地址:https://www.cnblogs.com/kukufan/p/12443371.html

时间: 2024-08-30 04:43:11

Java的开发—面向对象的7大原则之单一迪米特法则(六)的相关文章

Java的开发—面向对象的7大原则之依赖倒置原则(一)

一.定义: 依赖倒置原则(Dependecy Inversion Principle) 原文为: High level modules shouldnot depend upon low level modules.Both should depend upon abstractions.Abstractions should not depend upon details. Details should depend upon abstractions 三层定义: 1.高层模块不应该依赖底层模

面向对象的十大原则

面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton.Decorator.Observer这样的设计模式,而不重视面向对象的分析和设计.甚至还有经验丰富的Java程序员没有听说过OOPS和SOLID设计原则,他们根本不知道设计原则的好处,也不知道如何依照这些原则来进行编程. 众所周知,Java编程最基本的原则就是要追求高内聚和低耦合的解决方案和代码模块设计.查看Apac

Java软件开发工程师市场需求大不大

Java编程语言是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异.多线程的动态语言.为什么Java开发工程师的待遇一直那么高呢? Java行业市场需求存在巨大的缺口 这几年中国在移动互联网这块发展非常迅猛,各种创业公司.小团队如雨后春笋般冒出来,对Java开发的需要变大.但存在人才发展跟不上市场的需求的现状,相对应的给优秀Java人才开出的薪资待遇随之水涨船高,为此很多大学生看中了这一前景,纷纷加入了动力节点Java培训机构,接受专业的培训,与企业零距离对

面向对象设计原则之五:迪米特法则

迪米特法则 迪米特法则(Law of Demeter)又叫最少知识原则(Least Knowledge Principle LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话. 对面向对象来说,一个软件实体应当尽可能的少的与其他实体发生相互作用.每一个软件单位对其他的单位都只有最少的知识,而其局限于那些与本单位密切相关的软件单位. 迪米特法则的目的在于降低类之间的耦合.由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块相互独立,相互之间不存在依赖关系.应用迪米特

设计模式六大原则之五:迪米特法则

定义:一个对象应该对其他对象保持最少的了解. 问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大. 解决方案:尽量降低类与类之间的耦合. 自从我们接触编程开始,就知道了软件编程的总的原则:低耦合,高内聚.无论是面向过程编程还是面向对象编程,只有使各个模块之间的耦合尽量的低,才能提高代码的复用率.低耦合的优点不言而喻,但是怎么样编程才能做到低耦合呢?那正是迪米特法则要去完成的. 迪米特法则又叫最少知道原则,最早是在1987年由美国Northeastern Un

[转]设计模式六大原则[5]:迪米特法则

定义:一个对象应该对其他对象保持最少的了解. 问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大. 解决方案:尽量降低类与类之间的耦合. 自从我们接触编程开始,就知道了软件编程的总的原则:低耦合,高内聚.无论是面向过程编程还是面向对象编程,只有使各个模块之间的耦合尽量的低,才能提高代码的复用率.低耦合的优点不言而喻,但是怎么样编程才能做到低耦合呢?那正是迪米特法则要去完成的. 迪米特法则又叫最少知道原则,最早是在1987年由美国Northeastern Un

面向对象的5大原则

面向对象的三大特征 ①继承, 通过子类继承父类,达到复用父类的目的 ②封装, 将属性和方法结合在一起,定义为一种类型,一般会将信息private化 ③多态, 声明形式一致,实现方式不同,(体现方式:方法重载,方法重写),形参为父类,实参为任意子类对象 面向对象的五大基本原则(S-O-L-I-D,联想solid单词) ①单一原则((single responsibility principle) 一个类只能有一个引起它变化的 原因 ②开放关闭原则(open-closed principle) 软件

6大原则java

1.开闭原则(Open Close Principle)定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭.    开放-封闭原则的意思就是说,你设计的时候,时刻要考虑,尽量让这个类是足够好,写好了就不要去修改了,如果新需求来,我们增加一些类就完事了,原来的代码能不动则不动.这个原则有两个特性,一个是说"对于扩展是开放的",另一个是说"对于更改是封闭的".面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码.这就是"开放-封闭原则&

面向对象之两大要领 (转)

原文: http://cpper.info/2016/01/05/Two-Points-Of-Oriented-Object.html. 总览 在工作初期,我们可能会经常会有这样的感觉,自己的代码接口设计混乱.代码耦合较为严重.一个类的代码过多等等,自己回头看的时候都觉得汗颜.再看那些知名的开源库,它们大多有着整洁的代码.清晰简单的接口.职责单一的类,这个时候我们通常会捶胸顿足而感叹:什么时候老夫才能写出这样的代码! 作为新手,我们写的东西不规范或者说不够清晰的原因是缺乏一些指导原则.我们手中挥