1.前言
最近在看《游戏开发与设计模式》一书,看到控制反转设计模式,作者说:上层模块不应该依赖于下层模块,上层模块和下层模块都应该依赖于接口,这样能减少耦合。然后附带举了个例子,我觉得特别好,就是一台计算机是属于上层模块,里面硬盘属于下层模块,计算机依赖于硬盘,硬盘是计算机的基本组成部件之一。这里提到依赖一词,下面就详细谈谈依赖。
2.依赖
依赖就是一种联系关系,人对人的依赖那是一种羁绊关系。再拿上面的计算机举例,华硕是我们都耳熟能详的计算机厂商,西部数据和希捷都是硬盘厂商,如果说华硕依赖于某一个具体型号的硬盘,那么华硕同一款型号的电脑那得生产多少台内置硬盘不同的型号的电脑。假设华硕厂商喜欢用西部数据的硬盘,那好假如西部数据倒闭或者硬盘升级,那么华硕厂商是不是会造成连锁反应,华硕已经生产的电脑要重新回炉重造或者说要被迫改成使用其他希捷厂商的电脑。造成这种问题的原因就是华硕对西部数据有严重的依赖关系,解决方法就是硬盘厂商生产硬盘的时候遵循硬盘接口SATA接口协议,然后计算机厂商也遵循这种接口协议,这就是我们看到的PC具有好多接口例如我们熟知的USB接口,USB是更通用的接口,无论鼠标、键盘还是优盘都具备这样的接口,所以只要遵循USB接口或者ASTA接口的设备都能用用在任何一个PC计算机上。我们如果写代码的话,也能这样设计我们的代码模块,那么模块跟模块之间耦合度就很低了。下面我们来看一个简单的例子:
1 public class FlashDisk 2 { 3 public string TypeName { get; set; } 4 public void TransportData() 5 { 6 Console.WriteLine(string.Format("读取{0}硬盘的数据")); 7 } 8 9 public FlashDisk(string name) 10 { 11 TypeName = name; 12 } 13 } 14 15 public class HardDisk 16 { 17 public string TypeName { get; set; } 18 public void TransportData() 19 { 20 Console.WriteLine(string.Format("读取{0}硬盘的数据")); 21 } 22 23 public HardDisk(string name) 24 { 25 TypeName = name; 26 } 27 } 28 public class Computer 29 { 30 public Computer(string name) 31 { 32 TypeName = name; 33 } 34 public void ReadHardDiskData(HardDisk m_HardDisk) 35 { 36 m_HardDisk.TransportData(); 37 } 38 39 public void ReadFlashDiskData(FlashDisk m_FlashDisk) 40 { 41 m_FlashDisk.TransportData(); 42 } 43 } 44 static void ReadData() 45 { 46 HardDisk hardDisk = new HardDisk("西部数据"); 47 FlashDisk flashDisk = new FlashDisk("闪迪"); 48 Computer pc = new Computer("联想"); 49 pc.ReadHardDiskData(hardDisk); 50 pc.ReadFlashDiskData(flashDisk); 51 }