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();
    }
}

你可能感兴趣的:(1.4迪米特原则)