软件工程师要求,东莞债优化,免费做外贸的网站平台有哪些,招聘页面设计模板1.背景
1987年秋天由美国Northeastern University的Ian Holland提出#xff0c;被UML的创始者之一Booch等普及。后来#xff0c;因为在经典著作《 The Pragmatic Programmer》而广为人知。 2.概念
迪米特法则#xff08;Law of Demeter#xff09;又叫作最少知识原则被UML的创始者之一Booch等普及。后来因为在经典著作《 The Pragmatic Programmer》而广为人知。 2.概念
迪米特法则Law of Demeter又叫作最少知识原则The Least Knowledge Principle一个类对于其他类知道的越少越好就是说一个对象应当对其他对象有尽可能少的了解,只和朋友通信不和陌生人说话。英文简写为: LOD。
通俗的讲 不该知道的不要知道 一个类应该保持对其它对象最少的了解只和朋友通信不和陌生人说话 降低类之间的耦合度 从依赖者的角度来说只依赖应该依赖的对象 从被依赖者的角度说只暴露应该暴露的方法
设计原则 在类的划分上应该创建弱耦合的类。类与类之间的耦合越弱就越有利于实现可复用的目标 在类的结构设计上尽量降低类成员的访问权限 在类的设计上优先考虑将一个类设置成不变类 在对其他类的引用上将引用其他对象的次数降到最低 不暴露类的属性成员而应该提供相应的访问器set 和 get 方法 谨慎使用序列化Serializable功能 3.案例
需求租客想通过中介找房子租客想要一个20平、2000一个月的。
方案一不满足迪米特原则把所有房源都给租客租客自己选 /// summary/// 房源/// /summarypublic class Room{private int are;private int pay;public int getAre(){return are;}public void setAre(int are){this.are are;}public int getPay(){return pay;}public void setPay(int pay){this.pay pay;}}/// summary/// 中介/// /summarypublic class Mediator{private ListRoom allRooms new ListRoom();/// summary/// 初始化房源/// /summarypublic Mediator(){for (int i 0; i 10; i){Room room new Room();room.setAre((i 1) * 5);room.setPay((i % 4 0 ? 1 : i % 4) * 1000);allRooms.Add(room);}}/// summary/// 获取所有房源/// /summary/// returns/returnspublic ListRoom GetAllRooms(){return allRooms;}}/// summary/// 租客/// /summarypublic class Tenant{public static void RentRoom(Mediator mediator){// 通过中介获取所有房屋ListRoom allRoom mediator.GetAllRooms();foreach(Room room in allRoom){if (IsSuitable(room)){Console.WriteLine(房屋找到了);}}}/// summary/// 判断房子是否满足客户需求/// /summary/// param nameroom/param/// returns/returnsprivate static bool IsSuitable(Room room){// 筛选房屋return true;}}{//LOD:迪米特原则Tenant.RentRoom(new Mediator());} 代码分析
以上的方案是中介直接把所有的房源全部提供给顾客其中就包含不满足租客条件的房源这就增加了租客和房源直接的耦合度。 方案二满足迪米特原则先按照要求把房源筛选出来给租客 /// summary/// 房源/// /summarypublic class Room{private int are;private int pay;public int getAre(){return are;}public void setAre(int are){this.are are;}public int getPay(){return pay;}public void setPay(int pay){this.pay pay;}}/// summary/// 中介/// /summarypublic class MediatorLOD{private ListRoom allRooms new ListRoom();public MediatorLOD(){for (int i 0; i 10; i){Room room new Room();room.setAre((i 1) * 5);room.setPay((i % 4 0 ? 1 : i % 4) * 1000);allRooms.Add(room);}}/// summary/// 找出符合租客要求的房子/// /summary/// param nameare/param/// param namepay/param/// returns/returnspublic Room RentRoom(int are, int pay){// 通过中介获取所有房屋foreach(Room room in allRooms){if (IsSuitable(room, are, pay)){return room;}}return null;}/// summary/// 判断房源是否满足客户的要求/// /summary/// param nameroom/param/// param nameare/param/// param namepay/param/// returns/returnsprivate bool IsSuitable(Room room, int are, int pay){// 筛选房屋return true;}}/// summary/// 租客/// /summarypublic class TenantLOD{/// summary/// 获取满足条件的房源/// /summary/// param namemediator/parampublic static void RentRoom(MediatorLOD mediator){Console.WriteLine(mediator.RentRoom(20, 2000));}}{//LOD:迪米特原则Tenant.RentRoom(new Mediator());}代码分析
相比方案一当前方案把筛选的过程放到了租客能联系到的中介身上中介处理房源而租客和房源的联系微乎其微这就利用了LOD 原则降低了租客和房源的耦合度租客只看到符合条件的房源就可以了。 4.优缺点
优点 降低了类之间的耦合度使类与类之间保持松散的耦合关系 由于耦合度降低提高了模块的相对独立性 提高类的可复用性和系统的扩展性
缺点 迪米特法则是一种面向对象系统设计风格的一种法则尤其适合做大型复杂系统设计指导原则。但是也会造成系统的不同模块之间的通信效率降低使系统的不同模块之间不容易协调等。