迪米特法则

定义:迪米特法则又叫最少知识原则,指一个对象应对其他对象有尽可能少的了解,也就是说,一个模块或对象应尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立,这样当一个模块修改时,影响的模块就会越少,扩展起来更加容易。

自己理解:就是说类之间联系减少、降低耦合。

实例:

有个总公司,下面有一个分公司,现在要查询总公司分公司的员工id

 /// <summary>
    /// 总公司员工
    /// </summary>
    class Employee
    {
        public string id;
        public String ID
        {
            get { return id; }
            set { id = value; }
        }
    }
    /// <summary>
    /// 分公司员工
    /// </summary>
    class SubEmployee
    {
        private string id;
        public string ID
        {
            get { return id; }
            set { id = value; }
        }
    }

    /// <summary>
    /// 总公司管理员工
    /// </summary>
    class Commanymanager
    {
        public List<Employee> GetEmployee()
        {
            List<Employee> list = new List<Employee>();
            for (int i = 1; i < 10; i++)
            {
                Employee emp = new Employee();
                emp.ID = "总公司" + i;
                list.Add(emp);
            }
            return list;
        }

        public void pintAllEmppyee(Subcommanymanag sub)
        {
            sub.Shuchu();
            List<Employee> list = this.GetEmployee();
            foreach (var item in list)
            {
                Console.WriteLine(item.ID);
            }
        }
    }

    /// <summary>
    /// 分公司管理员工
    /// </summary>
    class Subcommanymanag
    {
        public List<SubEmployee> GetSubCommany()
        {
            List<SubEmployee> list = new List<SubEmployee>();
            for (int i = 1; i < 20; i++)
            {
                SubEmployee sub = new SubEmployee();
                sub.ID = "分公司" + i;
                list.Add(sub);
            }
            return list;
        }
        public void Shuchu()
        {
            List<SubEmployee> list = GetSubCommany();
            foreach (var item in list)
            {
                Console.WriteLine(item.ID);
            }
        }

    }

客户端:

Commanymanager comanger = new Commanymanager();
            comanger.pintAllEmppyee(new Subcommanymanag());
            Console.Read();

这样打印的话,就可以打印出总公司和分公司员工的ID

 

依赖倒置原则:抽象不应该依赖细节,也就是“面向接口编程”,而不是面向实现编程。

接口隔离原则:多个专门的接口要比一个单一的总接口要好,也就是说不要让一个单一的接口承担过多的职责。

总结:迪米特法则、依赖倒置、接口隔离这些原则应该都是比较好理解的,用的时候就要多考虑这些。

最近突发奇想:想写一个贪吃蛇的游戏:

定义类:

1.墙类

1.1显示墙得方法、属性

2.食物类

2.1显示食物的方法

2.2实现食物随机出现的方法

3.蛇

3.1显示蛇的方法/可以改变位置

3.2蛇运动的方法

3.2.1蛇是否吃到食物

3.2.2蛇是否撞墙

3.2.3蛇是否吃到自己

3.2.4蛇通关

 

键盘操作蛇运动

 

posted @ 2018-05-16 00:33  Chin_lung  阅读(193)  评论(0编辑  收藏  举报