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

1.1 使用接口編程

先來看看在用Java、C#這樣的面向?qū)ο笳Z言編程時,經(jīng)常被提倡的盡量使用接口的理念。在用繼承基類和實現(xiàn)接口構(gòu)建的類型層次體系中,越往上的類型越一般和抽象,越往下的類型越具體和多功能。在定義變量時,無論是類字段、方法變量,還是方法的參數(shù)和返回值,都盡可能使用抽象的類型。例如Java語言只支持單個基類,類型的大量抽象繼承均以接口的方式體現(xiàn),導(dǎo)致在一個類的層次體系的高層,接口往往比類多,所以盡可能使用的抽象類型就以接口居多,這也就是所謂的使用接口編程。例如下面的C#代碼。

在以ConcreteClass結(jié)尾的兩個方法中,使用的是具體的類型Hashtable;而在以Interface結(jié)尾的兩個方法中,使用的是抽象的接口IDictionary。使用接口的好處是,對于DeclareAndReturnInterface方法,將來如果基于業(yè)務(wù)邏輯或性能的考慮,覺得應(yīng)該采用另一個更合適的實現(xiàn)IDictionary的類,如SortedList,只需要把dict變量初始化成一個SortedList,后面的代碼和返回的類型絲毫不受影響,因而對調(diào)用方是透明的;對于PassInterface方法,能夠接受任何實現(xiàn)了IDictionary接口的參數(shù),調(diào)用方傳入的具體類型發(fā)生變動不會影響該方法的運(yùn)作。簡言之,就是使用的類型越一般,代碼的應(yīng)用范圍越廣,適應(yīng)性越好。當(dāng)然,應(yīng)該是盡可能一般,而不是無條件的最一般。所謂可能,就是指該類型的接口能夠滿足使用者的需求。例如,在上面的例子中不能使用比IDictionary更一般的接口ICollection,因為它沒有Add方法。

主站蜘蛛池模板: 陇川县| 永济市| 苍梧县| 白山市| 四平市| 宁明县| 手游| 通渭县| 苗栗县| 丰顺县| 酒泉市| 北京市| 黑山县| 九江市| 巫溪县| 裕民县| 平罗县| 阜阳市| 泰宁县| 大余县| 含山县| 濉溪县| 宁津县| 光泽县| 项城市| 安阳市| 科技| 理塘县| 綦江县| 河池市| 潢川县| 神池县| 正安县| 孟津县| 丹东市| 文安县| 贵州省| 从化市| 滕州市| 嘉义县| 淄博市|