软件设计原则——依赖倒转原则
生活随笔
收集整理的這篇文章主要介紹了
软件设计原则——依赖倒转原则
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
依賴倒轉(zhuǎn)原則
高層模塊不應(yīng)該依賴低層模塊,兩者都應(yīng)該依賴其抽象;
抽象不應(yīng)該依賴細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴抽象。
簡單的說就是要求對(duì)抽象進(jìn)行編程,不要對(duì)實(shí)現(xiàn)進(jìn)行編程,
這樣就降低了客戶與實(shí)現(xiàn)模塊間的耦合。
【例】組裝電腦
現(xiàn)要組裝一臺(tái)電腦,需要配件cpu,硬盤,內(nèi)存條。只有這些配置都有了,計(jì)算機(jī)才能正常的運(yùn)行。
選擇cpu有很多選擇,如Intel,AMD等,硬盤可以選擇希捷,西數(shù)等,內(nèi)存條可以選擇金士頓,海盜船等。
IntelCpu.java
package com.itheima.principles.demo3.before;/*** @version v1.0* @ClassName: IntelCpu* @Description: Intel cpu* @Author: dym*/ public class IntelCpu {public void run() {System.out.println("使用Intel處理器");} }KingstonMemory.java
package com.itheima.principles.demo3.before;/*** @version v1.0* @ClassName: KingstonMemory* @Description: 金士頓內(nèi)存條類* @Author: dym*/ public class KingstonMemory {public void save() {System.out.println("使用金士頓內(nèi)存條");} }XiJieHardDisk.java
package com.itheima.principles.demo3.before;/*** @version v1.0* @ClassName: XiJieHardDisk* @Description: 希捷硬盤* @Author: dym*/ public class XiJieHardDisk {//存儲(chǔ)數(shù)據(jù)的方法public void save(String data) {System.out.println("使用希捷硬盤存儲(chǔ)數(shù)據(jù)為:" + data);}//獲取數(shù)據(jù)的方法public String get() {System.out.println("使用希捷希捷硬盤取數(shù)據(jù)");return "數(shù)據(jù)";} }Computer.java
package com.itheima.principles.demo3.before;/*** @version v1.0* @ClassName: Computer* @Description: TODO(一句話描述該類的功能)* @Author: dym*/ public class Computer {private XiJieHardDisk hardDisk;private IntelCpu cpu;private KingstonMemory memory;public XiJieHardDisk getHardDisk() {return hardDisk;}public void setHardDisk(XiJieHardDisk hardDisk) {this.hardDisk = hardDisk;}public IntelCpu getCpu() {return cpu;}public void setCpu(IntelCpu cpu) {this.cpu = cpu;}public KingstonMemory getMemory() {return memory;}public void setMemory(KingstonMemory memory) {this.memory = memory;}public void run() {System.out.println("運(yùn)行計(jì)算機(jī)");String data = hardDisk.get();System.out.println("從硬盤上獲取的數(shù)據(jù)是:" + data);cpu.run();memory.save();} }ComputerDemo.java
package com.itheima.principles.demo3.before;/*** @version v1.0* @ClassName: ComputerDemo* @Description: TODO(一句話描述該類的功能)* @Author: dym*/ public class ComputerDemo {public static void main(String[] args) {//創(chuàng)建組件對(duì)象XiJieHardDisk hardDisk = new XiJieHardDisk();IntelCpu cpu = new IntelCpu();KingstonMemory memory = new KingstonMemory();//創(chuàng)建計(jì)算機(jī)對(duì)象Computer c = new Computer();//組裝計(jì)算機(jī)c.setCpu(cpu);c.setHardDisk(hardDisk);c.setMemory(memory);//運(yùn)行計(jì)算機(jī)c.run();} }上面代碼可以看到已經(jīng)組裝了一臺(tái)電腦,但是似乎組裝的電腦的cpu只能是Intel的,內(nèi)存條只能是金士頓的,硬盤只能是希捷的,
這對(duì)用戶肯定是不友好的,用戶有了機(jī)箱肯定是想按照自己的喜好,選擇自己喜歡的配件。
根據(jù)依賴倒轉(zhuǎn)原則進(jìn)行改進(jìn):
代碼我們只需要修改Computer類,讓Computer類依賴抽象(各個(gè)配件的接口),而不是依賴于各個(gè)組件具體的實(shí)現(xiàn)類。
Cpu.java
package com.itheima.principles.demo3.after;/*** @version v1.0* @ClassName: Cpu* @Description: cpu接口* @Author: dym*/ public interface Cpu {//運(yùn)行cpupublic void run(); }IntelCpu.java
package com.itheima.principles.demo3.after;/*** @version v1.0* @ClassName: IntelCpu* @Description: Intel cpu* @Author: dym*/ public class IntelCpu implements Cpu {public void run() {System.out.println("使用Intel處理器");} }HardDisk.java
package com.itheima.principles.demo3.after;/*** @version v1.0* @ClassName: HardDisk* @Description: 硬盤接口* @Author: dym*/ public interface HardDisk {//存儲(chǔ)數(shù)據(jù)public void save(String data);//獲取數(shù)據(jù)public String get(); }XiJieHardDisk.java
package com.itheima.principles.demo3.after;/*** @version v1.0* @ClassName: XiJieHardDisk* @Description: 希捷硬盤* @Author: dym*/ public class XiJieHardDisk implements HardDisk {//存儲(chǔ)數(shù)據(jù)的方法public void save(String data) {System.out.println("使用希捷硬盤存儲(chǔ)數(shù)據(jù)為:" + data);}//獲取數(shù)據(jù)的方法public String get() {System.out.println("使用希捷希捷硬盤取數(shù)據(jù)");return "數(shù)據(jù)";} }Memory.java
package com.itheima.principles.demo3.after;/*** @version v1.0* @ClassName: Memory* @Description: 內(nèi)存條接口* @Author: dym*/ public interface Memory {public void save(); }KingstonMemory.java
package com.itheima.principles.demo3.after;/*** @version v1.0* @ClassName: KingstonMemory* @Description: 金士頓內(nèi)存條類* @Author: dym*/ public class KingstonMemory implements Memory {public void save() {System.out.println("使用金士頓內(nèi)存條");} }Computer.java
package com.itheima.principles.demo3.after;/*** @version v1.0* @ClassName: Computer* @Description: TODO(一句話描述該類的功能)* @Author: dym*/ public class Computer {private HardDisk hardDisk;private Cpu cpu;private Memory memory;public HardDisk getHardDisk() {return hardDisk;}public void setHardDisk(HardDisk hardDisk) {this.hardDisk = hardDisk;}public Cpu getCpu() {return cpu;}public void setCpu(Cpu cpu) {this.cpu = cpu;}public Memory getMemory() {return memory;}public void setMemory(Memory memory) {this.memory = memory;}//運(yùn)行計(jì)算機(jī)public void run() {System.out.println("運(yùn)行計(jì)算機(jī)");String data = hardDisk.get();System.out.println("從硬盤上獲取的數(shù)據(jù)是:" + data);cpu.run();memory.save();} }ComputerDemo.java
package com.itheima.principles.demo3.after;/*** @version v1.0* @ClassName: ComputerDemo* @Description: TODO(一句話描述該類的功能)* @Author: dym*/ public class ComputerDemo {public static void main(String[] args) {//創(chuàng)建計(jì)算機(jī)的組件對(duì)象HardDisk hardDisk = new XiJieHardDisk();Cpu cpu = new IntelCpu();Memory memory = new KingstonMemory();//創(chuàng)建計(jì)算機(jī)對(duì)象Computer c = new Computer();//組裝計(jì)算機(jī)c.setCpu(cpu);c.setHardDisk(hardDisk);c.setMemory(memory);//運(yùn)行計(jì)算機(jī)c.run();} }?
總結(jié)
以上是生活随笔為你收集整理的软件设计原则——依赖倒转原则的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件设计原则——里氏代换原则
- 下一篇: 软件设计原则——接口隔离原则