编程思想:迪米特原则

要求一个对象应该对其他对象有最少的了解

降低类之间的耦合

迪米特法则就是一个类正在创建方法和属性的时候要遵守的法则

多用于我们设计类的时候来使用这个迪米特原则

我们下面这段代码,通过两个类实现人关机的案例

        static void Main(string[] args)
        {
            //实现人关机的案列

        }
        public class 电脑
        {
            //1.保存当前程序
            public void 保存程序()
            {
                Console.WriteLine("保存当前程序");
            }
            //2.关闭显示器
            public void 关闭屏幕()
            {
                Console.WriteLine("关闭屏幕");
            }
            //3.关闭电源
            public void 关闭电源()
            {
                Console.WriteLine("关闭电源");
            }
        }
        public class 人类
        {
            
            public void 关机(电脑 电脑)
            {
                电脑.保存程序();
                电脑.关闭屏幕();
                电脑.关闭电源();
            }
        }

代码看起来是没什么问题的,可是不符合我们的迪米特原则,迪米特原则的第一句话就是类和类之间应该有最少的了解。现在我们将此需求改变,我们关机需要五十步,如果这个关机类不是你写的,是你们团队的某个人写的,当你需要调用的时候你岂不是要通读这个类,去看看这五十步是怎么回事。这对我们程序员来说是非常痛苦的。这就是没使用迪米特原则来写代码的代价。

优化:

        static void Main(string[] args)
        {
            //实现人关机的案列

        }
        public class 电脑
        {
            //1.保存当前程序
            private void 保存程序()
            {
                Console.WriteLine("保存当前程序");
            }
            //2.关闭显示器
            private void 关闭屏幕()
            {
                Console.WriteLine("关闭屏幕");
            }
            //3.关闭电源
            private void 关闭电源()
            {
                Console.WriteLine("关闭电源");
            }
            public void 关机()
            {
                this.保存程序();
                this.关闭屏幕();
                this.关闭电源();
            }
        }
        public class 人类
        {
            public void 关机(电脑 电脑)
            {
                电脑.关机();
            }
        }

这里我们在电脑类里添加一个方法,我们只需要让人这个类知道我有一个关机的方法供他调用就可以了,以至于关机的步骤其实对他来说可以让他不知道,这也就符合我们的迪米特原则了。

迪米特原则中最重要的思想:只和直接朋友通信

那么什么是直接朋友?

  • 成员对象
  • 方法参数
  • 方法返回值
  • 出现在局部变量中的类不是直接朋友

请看例子

        static void Main(string[] args)
        {
            //实现打印总公司和分公司的人员ID
            ///总公司员工类
            ///总公司员工管理类 1获取总公司所有员工2.打印总公司员工3.打印分公司员工
            ///分公司员工类
            ///分公司员工管理类 获取分公司所有员工
            总公司员工管理类 总公司 = new 总公司员工管理类();
            分公司员工管理类 分公司 = new 分公司员工管理类();
            总公司.打印();
            分公司.打印();
            Console.ReadKey();
        }
        public class 总公司
        {
            public int ID { get; set; }
        }
        public class 总公司员工管理类
        {
            public List<总公司>获取所有员工()
            {
                List<总公司> 总公司人数 = new List<总公司>();
                for (int i = 0; i < 10; i++)
                {
                    总公司 总公司 = new 总公司();
                    总公司.ID = i;
                    总公司人数.Add(总公司);
                }
                return 总公司人数;
            }
            //打印总公司的ID
            public void 打印()
            {
                //获取总公司员工
               List<总公司> 总公司人数= this.获取所有员工();
                Console.WriteLine("总公司的员工ID是:");
                foreach (var item in 总公司人数)
                {
                    Console.WriteLine(item.ID+"、");
                }
               
            }
        }
        public class 分公司
        {
            public int ID { get; set; }
        }
        public class 分公司员工管理类
        {
            
            public List<分公司> 获取分公司所有员工()
            {
                List<分公司> 分公司人数 = new List<分公司>();
                for (int i = 0; i < 5; i++)
                {
                    分公司 分公司 = new 分公司();
                    分公司.ID = i;
                    分公司人数.Add(分公司);
                }
                return 分公司人数;
            }
            public void 打印()
            {
                //获取分公司员工
                List<分公司> 分公司人数 = this.获取分公司所有员工();
                Console.WriteLine("分公司的员工ID是:");
                foreach (var item in 分公司人数)
                {
                    Console.WriteLine(item.ID + "、");
                }
            }
        }

这就符合我们的迪米特原则!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值