一、什么是倒转?
传统的过程式设计倾向于使高层次的模块依赖于低层次的模块,抽象层依赖 于具体的层次。
二、什么是依赖倒转原则
依赖倒转(Dependence Inversion Principle ):
1.抽象不应该依赖于细节,细节应该依赖于抽 象。
2.高层模块不依赖底层模块,两者都依赖抽象。
三、组装电脑
四、怎样做到依赖倒转
1.工厂方法模式
2.模板方法模式
3.迭代子模式
主板 抽象类
1 /* 2 * 主板抽象类 3 */ 4 public abstract class MainBoard { 5 public abstract void doSomething(); 6 }
内存 抽象类
1 /* 2 * 内存的抽象类 3 */ 4 public abstract class Memory { 5 public abstract void doSomething(); 6 }
硬盘 抽象类
1 /* 2 * 硬盘的抽象类 3 */ 4 public abstract class HardDisk { 5 public abstract void doSomething(); 6 }
华硕主板
1 /* 2 * 华硕主板 3 */ 4 public class HuaSuoMainBoard extends MainBoard{ 5 6 public void doSomething() { 7 System.out.println("this is huasuoMainBoard"); 8 } 9 }
微星主板
1 //微星主板 2 public class WeiXingMainBoard extends MainBoard { 3 4 public void doSomething() { 5 System.out.println("this is weixingMainBoard"); 6 } 7 }
金士顿内存
1 //金士顿内存 2 public class JinShiDunMemory extends Memory { 3 4 public void doSomething() { 5 System.out.println("this is jinshidunMemory"); 6 } 7 }
金邦硬盘
1 //金邦硬盘 2 public class JinBangMemory extends Memory { 3 4 public void doSomething() { 5 System.out.println("this is jinbangMemory"); 6 } 7 }
西数硬盘
1 //西数硬盘 2 public class XiShuHardDisk extends HardDisk { 3 4 public void doSomething() { 5 System.out.println("this is xishuHardDisk"); 6 } 7 }
电脑
1 /* 2 * 电脑 3 */ 4 public class Computer { 5 private MainBoard mainBoard; 6 private Memory memory; 7 private HardDisk harddisk; 8 9 public MainBoard getMainBoard() { 10 return mainBoard; 11 } 12 13 public void setMainBoard(MainBoard mainBoard) { 14 this.mainBoard = mainBoard; 15 } 16 17 public Memory getMemory() { 18 return memory; 19 } 20 21 public void setMemory(Memory memory) { 22 this.memory = memory; 23 } 24 25 public HardDisk getHarddisk() { 26 return harddisk; 27 } 28 29 public void setHarddisk(HardDisk harddisk) { 30 this.harddisk = harddisk; 31 } 32 33 public void display() { 34 mainBoard.doSomething(); 35 memory.doSomething(); 36 harddisk.doSomething(); 37 } 38 }
测试
1 public class MainClass { 2 public static void main(String[] args) { 3 Computer computer = new Computer(); 4 computer.setMainBoard(new HuaSuoMainBoard()); 5 computer.setMemory(new JinShiDunMemory()); 6 computer.setHarddisk(new XiJieHardDisk()); 7 8 computer.display(); 9 10 System.out.println("-------------"); 11 12 computer.setMainBoard(new WeiXingMainBoard()); 13 computer.display(); 14 } 15 }