一、什么是倒转?
二、什么是依赖倒转原则
依赖倒转(Dependence Inversion Principle ):
1.抽象不应该依赖于细节,细节应该依赖于抽象。
2.高层模块不依赖底层模块,两者都依赖抽象。
三、组装电脑
四、怎样做到依赖倒转
1.工厂方法模式
2.模板方法模式
3.迭代子模式
代码实现:
电脑:
/* * 电脑 */ public class Computer { private MainBoard mainBoard; private Memory memory; private HardDisk harddisk; public MainBoard getMainBoard() { return mainBoard; } public void setMainBoard(MainBoard mainBoard) { this.mainBoard = mainBoard; } public Memory getMemory() { return memory; } public void setMemory(Memory memory) { this.memory = memory; } public HardDisk getHarddisk() { return harddisk; } public void setHarddisk(HardDisk harddisk) { this.harddisk = harddisk; } public void display() { mainBoard.doSomething(); memory.doSomething(); harddisk.doSomething(); } }
/* * 主板抽象类 */ public abstract class MainBoard { public abstract void doSomething(); }
/* * 硬盘的抽象类 */ public abstract class HardDisk { public abstract void doSomething(); }
/* * 内存的抽象类 */ public abstract class Memory { public abstract void doSomething(); }
/* * 华硕主板 */ public class HuaSuoMainBoard extends MainBoard{ public void doSomething() { System.out.println("this is huasuoMainBoard"); } }
public class WeiXingMainBoard extends MainBoard { public void doSomething() { System.out.println("this is weixingMainBoard"); } }
public class XiJieHardDisk extends HardDisk { public void doSomething() { System.out.println("this is xijieHardDisk"); } }
public class XiShuHardDisk extends HardDisk { public void doSomething() { System.out.println("this is xishuHardDisk"); } }
内存实现:
public class JinBangMemory extends Memory { public void doSomething() { System.out.println("this is jinbangMemory"); } }
public class JinShiDunMemory extends Memory { public void doSomething() { System.out.println("this is jinshidunMemory"); } }
public class MainClass { public static void main(String[] args) { Computer computer = new Computer(); computer.setMainBoard(new HuaSuoMainBoard()); computer.setMemory(new JinShiDunMemory()); computer.setHarddisk(new XiJieHardDisk()); computer.display(); System.out.println("-------------"); computer.setMainBoard(new WeiXingMainBoard()); computer.display(); } }
this is huasuoMainBoard this is jinshidunMemory this is xijieHardDisk ------------- this is weixingMainBoard this is jinshidunMemory this is xijieHardDisk