当前位置: 首页 > article >正文

【人工智能设计模式:迪米特法则的智能实践】

](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)
🌈个人主页: Aileen_0v0
🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法
💫个人格言:“没有罗马,那就自己创造罗马~”

文章目录

    • 前言
  • 迪米特法则
    • 含义
    • 案例
    • 运行结果
    • 总结:

前言

本文主要介绍的是软件设计原则中的迪米特法则。

在这里插入图片描述

迪米特法则

  • 迪米特法则 :只和直接朋友交谈,不跟“陌生人”说话(Talk only to your immediate friends and not to strangers

含义

  • 如果两个软件实体无需直接通信,那么就不应该发生直接的相互调用,可以通过第三方转发该调用。目的是降低类之间的耦合度,提高模块的相对独立性。
  • 迪米特法则中的朋友是指:当前对象本身、当前对象的成员对象、当前对象所创建的对象、当前对象的方法参数等,这些对象同当前对象存在关联关系、聚合或组合关系,可以直接访问这些对象的方法。
  • 有点抽象的概念🤏,让我们举个例子理解一下~
    在这里插入图片描述
  • 如果有一个公司要做软件,它不可能直接去找软件工程师去做,而是找专门做软件的公司,然后让这个软件公司去让软件工程师按照要求去做对应的软件,其中软件公司就是第三方,而软件工程师和要做软件的公司就是实体。

案例

  • 下面看一个例子来理解接口隔离原则

    • 【例】明星与经纪人的关系实例
    • 明星由于全身心投入艺术,所以许多日常事务由经纪人负责处理,如和粉丝的见面会,和媒体公司的业务洽淡等。这里的经纪人是明星的朋友,而粉丝和媒体公司是陌生人,所以适合使用迪米特法则。
    • 类图如下:
      在这里插入图片描述
  • 实现代码:

package principles.Dimite;

public class Star {
    private  String name;

    public Star(String name) {
        this.name = name;
    }

    public String getName(){
        return name;
    }
}

package principles.Dimite;

public class Fans {
    private String name;
    //提供一个有参构造方法
    public Fans(String name) {
        this.name = name;
    }
    
    public String getName() {
        return name;
    }
}

package principles.Dimite;

public class Company {
    private String  name;
    //构造方法
    public Company(String name){
        this.name = name;
    }

    //get方法
    public String getName(){
        return name;
    }

}

package principles.Dimite;

public class Agent {
    private Star star;
    private Fans fans;
    private Company company;

    //提供获取对象的get方法
    public void setStar(Star star) {
        this.star = star;
    }

    public void setFans(Fans fans) {
        this.fans = fans;
    }

    public void setCompany(Company company) {
        this.company = company;
    }

    public void meeting(){
        System.out.println(fans.getName() + "与明星 " + star.getName() + "见面了。");
    }

    public  void business(){
        System.out.println(company.getName() + "与明星 "+ star.getName() + "洽谈业务。");
    }
}

package principles.Dimite;

public class Test {
    public static void main(String[] args) {
        //创建对应的对象
        Agent agent = new Agent();
        //创建经纪公司对象
        Company company = new Company("时代峻峰");
        //设置给经纪人对象
        agent.setCompany(company);
        Fans fans = new Fans("Aileen");
        agent.setFans(fans);
        Star star = new Star("易烊千玺");
        agent.setStar(star);
        //调用和粉丝见面的方法
        agent.meeting();
        //和媒体公司洽谈业务的方法
        agent.business();
    }

}

运行结果

在这里插入图片描述

  • 通过运行结果,我们可以看到通过迪米特法则调用第三方经纪人Agent可以降低明星和粉丝,明星和媒体公司的耦合度。

总结:

  • 迪米特法则通过减少对象之间的直接交互,特别是避免与不相关的“陌生人”直接沟通,来降低耦合度,提高系统的可扩展性与可维护性。
    ](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)
    ](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)

http://www.kler.cn/a/450546.html

相关文章:

  • kkfileview代理配置,Vue对接kkfileview实现图片word、excel、pdf预览
  • 由于这些关键原因,我总是手边有一台虚拟机
  • 解析mysqlbinlog
  • 2024 楚慧杯 re wp
  • 详细ECharts图例3添加鼠标单击事件的柱状图
  • 本机如何连接虚拟机MYSQL
  • 十四、从0开始卷出一个新项目之瑞萨RZN2L之栈回溯(Default_Handler/hartfault)
  • 图为科技与奥比中光强强联手,打造机器人专用的全景全域AI视觉解决方案
  • 计算机网络:IP地址相关知识总结
  • 神经网络-LeNet
  • OBIEE 12C 功能测试:运行总和的运用
  • 概率论 期末 笔记
  • JVM系列(十三) -常用调优工具介绍
  • 14-C语言多文件编程
  • CES Asia(赛逸展)有哪些科技创新产品?
  • 静态路由配置包括DHCP
  • 华为ensp--BGP路由反射器
  • 数据库操作【JDBC HIbernate Mybatis】
  • C#变量作用域详解
  • uni-app 统一请求处理 请求拦截器 响应拦截器 请求封装
  • 熊军出席ACDU·中国行南京站,详解SQL管理之道
  • 大数据-258 离线数仓 - Griffin架构 配置安装 Livy 架构设计 解压配置 Hadoop Hive
  • OpenGL 笔记(2)
  • 家用无线路由器的 2.4GHz 和 5GHz
  • flink+kafka实现流数据处理学习
  • VSCode 性能优化指南:提高编码效率,减少资源占用