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


    目录: 

      设计模式六大原则:单一职责原则

      设计模式六大原则:接口隔离原则 

      设计模式六大原则:依赖倒置原则

      设计模式六大原则:里氏替换原则

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

      设计模式六大原则:开闭原则

    迪米特法则(LOD):

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

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

    优点:

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

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

    缺点:

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

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

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

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

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

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

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

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

    经典案例:

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

     1 internal class Program
     2 {
     3     private static void Main(string[] args)
     4     {
     5         Agent agent = new Agent();
     6         agent.setStar(new Star("蔡徐坤"));
     7         agent.setFans(new Fans("小明"));
     8         agent.setCompany(new Company("**公司"));
     9         agent.meeting();
    10         agent.business();
    11     }
    12 }
    13 
    14 internal class Agent
    15 {
    16     private Star myStar;
    17     private Fans myFans;
    18     private Company myCompany;
    19 
    20     public void setStar(Star myStar)
    21     {
    22         this.myStar = myStar;
    23     }
    24 
    25     public void setFans(Fans myFans)
    26     {
    27         this.myFans = myFans;
    28     }
    29 
    30     public void setCompany(Company myCompany)
    31     {
    32         this.myCompany = myCompany;
    33     }
    34 
    35     public void meeting()
    36     {
    37         Console.WriteLine($"{myFans.getName()}与明星{myStar.getName()}见面了。");
    38     }
    39 
    40     public void business()
    41     {
    42         Console.WriteLine($"{myCompany.getName()}与明星{myStar.getName()}洽谈业务。"
    43     }
    44 }
    45 
    46 internal class Star
    47 {
    48     private string name;
    49 
    50     public Star(string name)
    51     {
    52         this.name = name;
    53     }
    54 
    55     public string getName()
    56     {
    57         return this.name;
    58     }
    59 }
    60 
    61 internal class Company
    62 {
    63     private string name;
    64 
    65     public Company(string name)
    66     {
    67         this.name = name;
    68     }
    69 
    70     public string getName()
    71     {
    72         return this.name;
    73     }
    74 }
    75 
    76 internal class Fans
    77 {
    78     private string name;
    79 
    80     public Fans(string name)
    81     {
    82         this.name = name;
    83     }
    84 
    85     public string getName()
    86     {
    87         return this.name;
    88     }
    89 }
    view code
  • 相关阅读:
    jar包和war包的介绍和区别
    Oracle中rownum的基本用法
    深入理解JVM—JVM内存模型
    Oracle数据库中序列(SEQUENCE)的用法详解
    jvm主内存与工作内存
    jvm虚拟机
    java 冒泡排序
    java二分查找
    java中split()特殊符号"." "|" "*" "" "]"
    java map的实现原理
  • 原文地址:https://www.cnblogs.com/az4215/p/11489748.html
Copyright © 2020-2023  润新知