1.4迪米特原则

迪米特原则 (Law of Demeter LoD)是指一个对象应该对其他对象保持最少的了解,又叫最少
知道原则 (Least Knowledge Principle, LKP ),尽量降低类与类之间的精合度。迪米特原则主要
强调 只和朋友交流,不和陌生人说话。出现在成员变量、方法的输入、输出参数中的类都可以
称为成员朋友类,而出现在方法体内部的类不属于朋友类。

1.代表自己的接口

public class Me {

    public void talk(){
        System.out.println("我出去交流说");
    }
}

2.代表陌生人的类

public class Stranger {

    public void talk(){
        System.out.println("陌生人出去交流说");
    }
}

3.朋友类

public class Friend {

    public void talk(Me me){
        me.talk();
        System.out.println("淡黄色的长裙");
    }
    public void talk(Stranger stranger){
        stranger.talk();
        System.out.println("蓬松的头发");
    }
}

4.调用

public class TalkTest {

    public static void main(String [] args){
        Friend friend = new Friend();
        friend.talk(new Me());
        friend.talk(new Stranger());
    }
}

根据迪米特原则 我和陌生人是不能对话的 (我得通过我的朋友才能接触到牛姐的RAP)所以我们改造一下

5.我

public class Me {

    private Friend friend;

    private Stranger stranger;

    public void talk(){
        System.out.println("我说淡黄的长裙");
        friend.talk();
        stranger.talk();
    }

    public Friend getFriend() {
        return friend;
    }

    public void setFriend(Friend friend) {
        this.friend = friend;
    }

    public Stranger getStranger() {
        return stranger;
    }

    public void setStranger(Stranger stranger) {
        this.stranger = stranger;
    }
}

6.朋友

public class Friend {
    public void talk(){
        System.out.println("朋友说蓬松的头发");
    }
}

7.陌生人抽象类

public abstract class Stranger {
    protected abstract void talk();
}

7.实际陌生人

public class StrangerC extends Stranger{
    @Override
    protected void talk() {
        System.out.println("陌生人回应说就当作是一场梦,醒了还是会感动");
    }
}

7.调用

public class TalkTest {
    public static void main(String [] args){
        Me me = new Me();
        me.setFriend(new Friend());
        me.setStranger(new StrangerC());
        me.talk();
    }
}

也可以通过依赖倒转原则,让高层与底层都依赖于抽象,让某人与抽象陌生人进行交互.

8.我

public class Me {

    private Friend friend;

    public void talk(){
        System.out.println("我说淡黄的长裙");
        friend.talk();
    }

    public Friend getFriend() {
        return friend;
    }

    public void setFriend(Friend friend) {
        this.friend = friend;
    }
}

9.朋友

public class Friend {

    public void talk(){
        System.out.println("朋友说蓬松的头发");
    }
    // 朋友与陌生人交流
    public void talkWithStranger(){
        Stranger stranger = new Stranger();
        stranger.talk();
    }
}

10.陌生人

public class Stranger {
    public void talk(){
        System.out.println("陌生人回应说就当作是一场梦,醒了还是会感动");
    }
}

11.调用

public class TalkTest {
    public static void main(String [] args){
        Me me = new Me();
        me.setFriend(new Friend());
        me.talk();
        me.getFriend().talkWithStranger();
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容