C#设计模式六大原则之--迪米特法则

这篇具有很好参考价值的文章主要介绍了C#设计模式六大原则之--迪米特法则。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

设计模式六大原则是单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则。它们不是要我们刻板的遵守,而是根据实际需要灵活运用。只要对它们的遵守程度在一个合理的范围内,努为做到一个良好的设计。本文主要介绍一下.NET(C#) 迪米特法则。

 

迪米特法则(Law Of Demeter)

迪米特法则(Law of Demeter)又叫作最少知识原则(The Least Knowledge Principle),一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽可能少的了解,只和朋友通信,不和陌生人说话。迪米特法则的初衷在于降低类之间的耦合。由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。

迪米特法则不希望类之间建立直接的联系。

例如,

1)一般的反面设计实现

using System;
using System.Collections.Generic;
namespace ConsoleApplication
{
    //学校总部员工类
    class Employee
    {
        public string Id { get; set; }
    }
    //学院的员工类
    class CollegeEmployee
    {
        public string Id { get; set; }
    }
    //管理学院员工的管理类
    class CollegeManager
    {
        //返回学院的所有员工
        public List<CollegeEmployee> getAllEmployee()
        {
            List<CollegeEmployee> list = new List<CollegeEmployee>();
            //增加了10个员工到list
            for (int i = 0; i < 10; i++)
            {
                CollegeEmployee emp = new CollegeEmployee();
                emp.Id="学院员工ID=" + i;
                list.Add(emp);
            }
            return list;
        }
    }
    //学校管理类
    class SchoolManager
    {
        //返回学校总部的员工
        public List<Employee> getAllEmployee()
        {
            List<Employee> list = new List<Employee>();
            for (int i = 0; i < 5; i++)
            {
                Employee emp = new Employee();
                emp.Id = "学校总部员工ID=" + i;
                list.Add(emp);
            }
            return list;
        }
        //该方法完成输出学校总部和学院员工信息(ID)
       public void PrintAllEmployee(CollegeManager sub)
        {
            //CollegeEmployee不是SchoolManager的直接朋友
            //CollegeEmployee是以局部变量方式出现在SchoolManager违反了迪米特法则
            //获取学院员工
            List<CollegeEmployee> list1 = sub.getAllEmployee();
            Console.WriteLine("===========学院员工==============");
            foreach (CollegeEmployee e in list1)
            {
                Console.WriteLine(e.Id);
            }
            //获取学院总部员工
            List<Employee> list2 = this.getAllEmployee();
            Console.WriteLine("===========学院总部员工==============");
            foreach (Employee e in list2)
            {
                Console.WriteLine(e.Id);
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            //创建一个SchoolManager对象
            SchoolManager schoolManager = new SchoolManager();
            //输出学院的员工ID和学校总部的员工信息
            schoolManager.PrintAllEmployee(new CollegeManager());
            Console.ReadKey();
        }
    }
}

 2)迪米特法则的实现

using System;
using System.Collections.Generic;
namespace ConsoleApplication
{
    //学校总部员工类
    class Employee
    {
        public string Id { get; set; }
    }
    //学院的员工类
    class CollegeEmployee
    {
        public string Id { get; set; }
    }
    //管理学院员工的管理类
    class CollegeManager
    {
        //返回学院的所有员工
        public List<CollegeEmployee> getAllEmployee()
        {
            List<CollegeEmployee> list = new List<CollegeEmployee>();
            //增加了10个员工到list
            for (int i = 0; i < 10; i++)
            {
                CollegeEmployee emp = new CollegeEmployee();
                emp.Id = "学院员工ID=" + i;
                list.Add(emp);
            }
            return list;
        }
        //输出学院员工的信息
        public void printEmployee()
        {
            //获取到学院员工
            List<CollegeEmployee> list1 = getAllEmployee();
            Console.WriteLine("===========学院员工==============");
            foreach (CollegeEmployee e in list1)
            {
                Console.WriteLine(e.Id);
            }
        }
    }
    //学校管理类
    class SchoolManager
    {
        //返回学校总部的员工
        public List<Employee> getAllEmployee()
        {
            List<Employee> list = new List<Employee>();
            for (int i = 0; i < 5; i++)
            {
                Employee emp = new Employee();
                emp.Id = "学校总部员工ID=" + i;
                list.Add(emp);
            }
            return list;
        }
        //该方法完成输出学校总部和学院员工信息(ID)
       public void PrintAllEmployee(CollegeManager sub)
        {
            //将输出学院员工方法,封装到CollegeManager
            sub.printEmployee();
            //获取学院总部员工
            List<Employee> list2 = this.getAllEmployee();
            Console.WriteLine("===========学院总部员工==============");
            foreach (Employee e in list2)
            {
                Console.WriteLine(e.Id);
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            //创建一个SchoolManager对象
            SchoolManager schoolManager = new SchoolManager();
            //输出学院的员工ID和学校总部的员工信息
            schoolManager.PrintAllEmployee(new CollegeManager());
            Console.ReadKey();
        }
    }
}

 文章来源地址https://www.toymoban.com/news/detail-670354.html

到了这里,关于C#设计模式六大原则之--迪米特法则的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#设计模式之--六大原则 开闭原则

    设计模式六大原则是单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则。它们不是要我们刻板的遵守,而是根据实际需要灵活运用。只要对它们的遵守程度在一个合理的范围内,努为做到一个良好的设计。本文主要介绍一下.NET(C#) 开闭原则

    2024年02月10日
    浏览(36)
  • 设计模式之六大设计原则

    学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需写作干货注入能量… 热爱写作,愿意让自己成为更好

    2024年02月02日
    浏览(35)
  • 设计模式】引言-六大设计原则

    ● 概念:仅有一个引起其变化的原因。 ● 个人理解:一个类中应该是一组相关性很高的函数及数据的封装 主观性较强,和起名一样困难,一个方法放在ClassA合理还是放在ClassB合理? ● 概念:一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码

    2023年04月24日
    浏览(32)
  • 设计模式的六大设计原则

    一个类只负责一个单一明确的职责。如果一个类同时负责多个职责,来自职责A的需求变更引起的修改可能会导致职责B的功能发生故障。 比如说一个类T原本是符合单一职责的,后来因为某种原因或者是需求变更了,需要将职责P细分为颗粒度更细的职责P1和职责P2,这时候可以

    2024年02月09日
    浏览(32)
  • 设计模式——设计模式以及六大原则概述

    设计模式代表有经验的面向对象软件开发人员使用的最佳实践。 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。 这些解决方案是由许多软件开发人员在相当长的时间内通过试错获得的。 在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四

    2024年02月13日
    浏览(40)
  • 设计模式的六大原则

    1、单一职责原则,其核心就是控制类的粒度大小、将对象解耦、提高其内聚性; 2、开闭原则,可以通过“抽象约束、封装变化”来实现(对扩展开放(提供方),对修改关闭(使用方),遵循其他规则最终就是遵循开闭原则,所以开闭是最重要的一个原则); 3、里氏替换

    2024年02月09日
    浏览(29)
  • (学习打卡2)重学Java设计模式之六大设计原则

       前言:听说有本很牛的关于Java设计模式的书——重学Java设计模式,然后买了(*^▽^*) 开始跟着小傅哥学Java设计模式吧,本文主要记录笔者的学习笔记和心得。 打卡!打卡! 单一职责原则、开闭原则、里氏替换原则、迪米特法则、接口隔离原则、依赖倒置原则。 (引读:

    2024年02月03日
    浏览(38)
  • 二十四种设计模式与六大设计原则(三):【装饰模式、迭代器模式、组合模式、观察者模式、责任链模式、访问者模式】的定义、举例说明、核心思想、适用场景和优缺点

    接上次博客:二十四种设计模式与六大设计原则(二):【门面模式、适配器模式、模板方法模式、建造者模式、桥梁模式、命令模式】的定义、举例说明、核心思想、适用场景和优缺点-CSDN博客 目录 装饰模式【Decorator Pattern】 定义 举例说明 核心思想 适用场景 优缺点 迭代

    2024年04月17日
    浏览(44)
  • 6大设计规则-迪米特法则

    tip: 作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。 相关规则: 推荐: 体系化学习Java(Java面试专题) 1.6大设计规则-接口隔离原则 2.6大设计原则-里氏替换原则 3.6大设计规则-开闭原则

    2024年02月07日
    浏览(23)
  • 迪米特法则

    迪米特法则,也称为最少知识原则(Law of Demeter),是面向对象设计中的一个原则,旨在降低对象之间的耦合性,提高系统的可维护性和可扩展性。该原则强调一个类不应该直接与其它不相关的类相互交互,而是通过少数几个密切相关的类来进行通信。这有助于减少类之间的

    2024年02月12日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包