迪米特法则
定义:迪米特法则又叫最少知识原则,指一个对象应对其他对象有尽可能少的了解,也就是说,一个模块或对象应尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立,这样当一个模块修改时,影响的模块就会越少,扩展起来更加容易。
自己理解:就是说类之间联系减少、降低耦合。
实例:
有个总公司,下面有一个分公司,现在要查询总公司分公司的员工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蛇通关
键盘操作蛇运动