依赖倒转原则

依赖倒转原则
高层模块不应该依赖底层模块,两者都应依赖其抽象;抽象不应依赖细节,细节应该依赖抽象。就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。

电脑(Computer)与各个具体配件,先抽取出各组件的抽象类,让Computer依赖抽象而不是依赖各个组件的具体实现类。优点:后续添加更换其他配件时,只需要再定义该品牌实现接口就可以。

//首先创建计算机三个组件的接口
//硬盘
public interface Disk {
    //存储数据的方法
    public void save(String data);
    public String get();
}

//内存条
public interface Memory {
    public void save();
}

//Cpu
public interface Cpu {
    public void run();
}

``
`

```java
//创建具体的子实现类
//MiDisk
public class MiDisk implements Disk{
    @Override
    //获取数据的方法
    public void save(String data) {
        System.out.println("使用Mi硬盘存储数据"+data);
    }

    @Override
    //存储数据的方法
    public String get() {
        System.out.println("使用Mi硬盘获取数据");
        return "具体数据";
    }
}

//MiMemory
public class MiMemory implements Memory{
    public void save(){
        System.out.println("使用Mi内存条");
    }
}

//MiCpu
public class MiCpu implements Cpu{
    public void run(){
        System.out.println("MiCPU running...");
    }
}
//创建Computer
public class Computer {
   private Disk disk;
   private Memory memory;
   private Cpu cpu;

    public Disk getDisk() {
        return disk;
    }

    public void setDisk(Disk disk) {
        this.disk = disk;
    }

    public Memory getMemory() {
        return memory;
    }

    public void setMemory(Memory memory) {
        this.memory = memory;
    }

    public Cpu getCpu() {
        return cpu;
    }

    public void setCpu(Cpu cpu) {
        this.cpu = cpu;
    }
    //运行计算机
    public void run(){
        System.out.println("运行计算机");
        String data =disk.get();
        System.out.println("从硬盘上获取数据的是:"+data);
        cpu.run();
        memory.save();
    }
}
//创建具体的测试类
public class Demo {
    public static void main(String[] args) {
        //创建计算机的组件对象
        MiMemory miMemory = new MiMemory();
        MiCpu miCpu = new MiCpu();
        MiDisk miDisk = new MiDisk();
        Computer computer = new Computer();//创建计算机对象
        //组装计算机
        computer.setCpu(miCpu);
        computer.setDisk(miDisk);
        computer.setMemory(miMemory);
        //运行计算机
        computer.run();
    }
}

后期如果更换组件,例如Cpu。只需要再创建一个新品牌的cpu实现Cpu接口,在测试类中创建新品牌cpu,将其作为新的参数传递,组装到计算机中。

你可能感兴趣的:(java设计模式,java)