C# & Unity 面向对象补全计划 七大原则 之 迪米特法则(Law Of Demeter )难度:☆☆☆ 总结:直取蜀汉

本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正

本系列作为七大原则和设计模式的进阶知识,看不懂没关系

请看专栏:http://t.csdnimg.cn/mIitr,查漏补缺

1.迪米特法则(Law Of Demeter )

迪米特法则 强调了对象之间的松耦合。具体来说,它指出一个对象不应该知道太多关于其他对象的细节,只与直接的朋友通信

朋友是指:与该对象直接交互的其他对象或与该对象有关联关系的其他对象

2.举栗子

反例

我有三个类,服务员,菜单和顾客,我想让顾客点餐,需要什么?

一个服务员

一份菜单

服务员点单的行为

但是我不想让顾客知道我菜单的一些细节 ,比如我菜单内要是写了成本价,显然不能让其知道

但是在这个设计中,People 类直接依赖于 Menu 类,违反了迪米特法则

应该避免让 People 类知道太多关于 Menu 类的细节 ,但仍旧能让顾客点餐

修改

菜单类不变,直接让全权让服务员托管点单就行了

cs 复制代码
// 服务员
public class Waiter
{
    // 私有,不对外开放
    private Menu menu = new Menu();

    public string GetMenuContent()
    {
        return menu.Content;
    }
}

// 顾客
public class People
{
    public void GetMenu()
    {
        Waiter waiter = new Waiter();
        Console.WriteLine(waiter.GetMenuContent());
    }
}
相关推荐
The_cute_cat14 分钟前
JavaScript的初步学习
开发语言·javascript·学习
Naiva35 分钟前
【小技巧】Python + PyCharm 小智AI配置MCP接入点使用说明(内测)( PyInstaller打包成 .exe 可执行文件)
开发语言·python·pycharm
梦子要转行44 分钟前
matlab/Simulink-全套50个汽车性能建模与仿真源码模型9
开发语言·matlab·汽车
圆滚滚肉肉1 小时前
后端MVC(控制器与动作方法的关系)
后端·c#·asp.net·mvc
北方有星辰zz1 小时前
数据结构:栈
java·开发语言·数据结构
ajassi20002 小时前
开源 C# .net mvc 开发(六)发送邮件、定时以及CMD编程
linux·开源·c#·mvc
我是唐青枫2 小时前
C#.NET NLog 详解
开发语言·c#·.net
向宇it2 小时前
【unity游戏开发——网络】网络游戏通信方案——强联网游戏(Socket长连接)、 弱联网游戏(HTTP短连接)
网络·http·游戏·unity·c#·编辑器·游戏引擎
Mr_Xuhhh2 小时前
网络基础(1)
c语言·开发语言·网络·c++·qt·算法
旺旺大力包2 小时前
【JS笔记】JS 和 noodjs 的常见操作(十)
开发语言·javascript·node.js·ecmascript