下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

软件设计:设计模式六大原则:迪米特法则

作者:酷学大叔     来源: https://www.cnblogs.com/az4215/p/11489748.html点击数:676发布时间: 2020-04-12 10:57:20

标签: 设计模式软件设计软件测试

  迪米特法则(LawofDemeter)又叫作最少知识原则(LeastKnowledgePrinciple简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。英文简写为:LoD.

  设计模式六大原则:迪米特法则

  迪米特法则(LOD):

  也叫最少知识原则。迪米特法则的定义是只与你的直接朋友交谈,不与"陌生人"说话。如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该应用。其目的是降低类之间的耦合度,提高模块的相对独立性。

  迪米特法则中的朋友是指:当前对象本身、当前对象的成员对象、当前对象所创建的对象、当前对象的方法参数等,这些对象存在关联、聚合或组合关系,可以直接访问这些对象的方法。

  优点:

  1、降低类之间的耦合度,提高模块的相对独立性。

  2、由于亲和度降低,从而提高了类的可复用率和系统的扩展性。

  缺点:

  过度使用迪米特法则会使系统产生大量的中介类,从而增加系统的复杂性,使模块之间的通信效率降低。所以,在釆用迪米特法则时需要反复权衡,确保高内聚和低耦合的同时,保证系统的结构清晰。

  使用迪米特法则需要注意:

  1、在类的划分上,应该创建弱耦合的类。类与类之间的耦合越弱,就越有利于实现可复用的目标。

  2、在类的结构设计上,尽量降低类成员的访问权限。

  3、在类的设计上,优先考虑将一个类设置成不变类。

  4、在对其他类的引用上,将引用其他对象的次数降到最低。

  5、不暴露类的属性成员,而应该提供相应的访问器(set和get方法)。

  6、谨慎使用序列化(Serializable)功能。

  经典案例:

  蔡徐坤与经纪人的关系实例。蔡徐坤只负责浪,经纪人负责处理日常事务,如与粉丝的见面会,与媒体公司的业务洽淡等。

  internalclassProgram

  {

  privatestaticvoidMain(string[]args)

  {

  Agentagent=newAgent();

  agent.setStar(newStar("蔡徐坤"));

  agent.setFans(newFans("小明"));

  agent.setCompany(newCompany("**公司"));

  agent.meeting();

  agent.business();

  }

  }

  internalclassAgent

  {

  privateStarmyStar;

  privateFansmyFans;

  privateCompanymyCompany;

  publicvoidsetStar(StarmyStar)

  {

  this.myStar=myStar;

  }

  publicvoidsetFans(FansmyFans)

  {

  this.myFans=myFans;

  }

  publicvoidsetCompany(CompanymyCompany)

  {

  this.myCompany=myCompany;

  }

  publicvoidmeeting()

  {

  Console.WriteLine($"{myFans.getName()}与明星{myStar.getName()}见面了。");

  }

  publicvoidbusiness()

  {

  Console.WriteLine($"{myCompany.getName()}与明星{myStar.getName()}洽谈业务。"

  }

  }

  internalclassStar

  {

  privatestringname;

  publicStar(stringname)

  {

  this.name=name;

  }

  publicstringgetName()

  {

  returnthis.name;

  }

  }

  internalclassCompany

  {

  privatestringname;

  publicCompany(stringname)

  {

  this.name=name;

  }

  publicstringgetName()

  {

  returnthis.name;

  }

  }

  internalclassFans

  {

  privatestringname;

  publicFans(stringname)

  {

  this.name=name;

  }

  publicstringgetName()

  {

  returnthis.name;

  }

  }

  迪米特法则可以简单说成:talkonlytoyourimmediatefriends。对于OOD来说,又被解释为下面几种方式:一个软件实体应当尽可能少的与其他实体发生相互作用。每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。

赞(13)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程