
上QQ阅读APP看书,第一时间看更新
2.1.2 实现
实现细节对于用户是隐藏的。我们必须时刻牢记关于实现的一个目标,那就是修改实现不需要变动用户代码。可能你看起来有些困惑,但该目标是设计问题的核心所在。
好的接口
如果接口设计得当,实现的修改不需要对用户代码做任何改变。
请记住接口包含了调用方法及返回值的语法。如果没有改变接口,用户无须关心是否修改了实现。程序员只关心使用相同的语法能够获得相同的值即可。
我们可以拿手机来举例。打电话的接口很简单,我们只需拨一个号码或者从地址簿中选取一个条目。如果供应商更新了软件,它不会改变你打电话的方式。无论如何修改实现,打电话的接口始终保持不变。然而,如果我的电话区号变了,供应商也有可能会修改接口。基础接口变了(比如电话区号变了),确实需要用户改变行为。商家希望保持这样的修改最小化,因为有些用户不喜欢这种改变,或者不想忍受这样的麻烦。
再说烤面包机的例子。只要接口一直是电源插座,具体实现可能会从一个燃煤电厂切换为核电站,但这不会影响烤面包片机。这里有一个非常重要的规则,即燃煤电厂和核电厂都必须遵循接口规格。如果燃煤电厂提供交流电(AC),而核电厂提供直流电(DC),就会出问题。用户和实现都必须要遵循接口规格。