官术网_书友最值得收藏!

Dependency Inversion Principle

The Dependency Inversion Principle states that:

1. High-level modules should not depend on low-level modules. Both should depend on abstractions.

2. Abstractions should not depend upon details. Details should depend upon abstractions.

The best way to explain this principle is by giving an example. Let's assume we have a worker class that is a low level class and a Manager class that is a high level class. The Manager class contains many complex functionalities which it implements along with the Worker class, so the classes will look something like this:

class Worker { 
 
   public void work() { 
       // ....working 
   } 
} 
 
class Manager { 
   
   //--Other Functionality 
   
   Worker worker; 
 
   public void setWorker(Worker w) { 
       worker = w; 
   } 
 
   public void manage() { 
       worker.work(); 
   } 
} 

Here the Manager class has been implemented and is directly associated with the Worker class due to which changes in the Worker class directly affect the Manager class.

If we have to add another class which would be a parent of the Worker class, and the Worker class does similar work to that of the Manager class, it will require lots of changes.

To make it easier to add the Manager class, we will use interfaces:

interface IWorker { 
   public void work(); 
} 
 
class Worker implements IWorker{ 
   public void work() { 
       // ....working 
   } 
} 
 
class SuperWorker  implements IWorker{ 
   public void work() { 
       //.... working much more 
   } 
} 
 
class Manager { 
   IWorker worker; 
 
   public void setWorker(IWorker w) { 
       worker = w; 
   } 
 
   public void manage() { 
       worker.work(); 
   } 
} 

Now the both the worker and SuperWorker class implement the IWorker, while the Manager class directly uses the IWorker to complete its functionality by which changes to the Worker and SuperWorker do not affect the Manager class.

主站蜘蛛池模板: 尼木县| 舟曲县| 突泉县| 海口市| 金沙县| 日照市| 英德市| 北碚区| 汽车| 大理市| 东乡族自治县| 兴化市| 达拉特旗| 张家口市| 绍兴县| 西乌珠穆沁旗| 孝昌县| 汨罗市| 淮阳县| 双牌县| 深泽县| 渭南市| 太康县| 临江市| 紫云| 台江县| 云梦县| 鄂尔多斯市| 雷山县| 塘沽区| 云安县| 津南区| 盐亭县| 开封市| 斗六市| 乃东县| 沙河市| 光泽县| 永善县| 麦盖提县| 靖江市|