首页 > 其他 > 详细

面向對象設計原則——迪米特法则

时间:2020-09-14 01:07:58      阅读:103      评论:0      收藏:0      [点我收藏+]

迪米特法则

迪米特法则(Law of Demeter,LoD)又叫作最少知识原则(Least Knowledge Principle,LKP)

只与你的直接朋友交谈,不跟“陌生人”说话

(Talk only to your immediate friends and not to strangers)

 

总的理解:

如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度

 

名词解析:

只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系

出现成员变量、方法参数、方法返回值中的类为直接的朋友

出现在局部变量中的类则不是直接的朋友。

 

实现方法:

  1. 从依赖者的角度来说,只依赖应该依赖的对象。
  2. 从被依赖者的角度说,只暴露应该暴露的方法。

注意事项:

1在类的划分上,应该创建弱耦合的类。类与类之间的耦合越弱,就越有利于实现可复用的目标。
2在类的结构设计上,尽量降低类成员的访问权限。
3在类的设计上,优先考虑将一个类设置成不变类。
4在对其他类的引用上,将引用其他对象的次数降到最低。
5不暴露类的属性成员,而应该提供相应的访问器(set 和 get 方法)。
6谨慎使用序列化(Serializable)功能。

 

例子

经纪人是明星的朋友,而粉丝和媒体公司是陌生人

技术分享图片

 

 

/**
 * 明星
 */
public class Star {
    private String name;

    public Star(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

 

/**
 * 粉丝
 */
public class Fans {
    private String name;

    public Fans(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

 

/**
 * 媒体公司
 */
public class Company {
    private String name;

    public Company(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

 

/**
 * 经纪人
 */
public class Agent {
    private Star myStar;
    private Fans myFans;
    private Company myCompany;

    public Star getMyStar() {
        return myStar;
    }

    public void setMyStar(Star myStar) {
        this.myStar = myStar;
    }

    public Fans getMyFans() {
        return myFans;
    }

    public void setMyFans(Fans myFans) {
        this.myFans = myFans;
    }

    public Company getMyCompany() {
        return myCompany;
    }

    public void setMyCompany(Company myCompany) {
        this.myCompany = myCompany;
    }

    /**
     * 经纪人的工作
     */
    public void meeting(){
        System.out.println(myFans.getName()+" 和明星"+myStar.getName()+"粉丝会议");
    }

    /**
     * 和媒体公司工作
     */
    public void business(){
        System.out.println(myCompany.getName()+" 和明星"+myStar.getName()+"接广告");
    }
}

测试:

public class DopTest {
    public static void main(String[] args) {
        //经济任
        Agent agent = new Agent();

        agent.setMyStar(new Star("quan"));
        agent.setMyFans(new Fans("qq"));
        agent.setMyCompany(new Company("gognsi"));

        agent.meeting();
        agent.business();
    }
    /**
     * qq 和明星quan粉丝会议
     * gognsi 和明星quan接广告
     */
}

 

面向對象設計原則——迪米特法则

原文:https://www.cnblogs.com/java-quan/p/13664262.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!