前言
很惭愧,学习编程2年多了,今天才明白接口的含义。从最开始接触师兄的Project,到后面自学Python开发,机器学习,一直都不懂接口有何作用。直到近几天在学习Java的过程中,才明白了接口——这个在编程中非常重要而又让初学者摸不着头脑的词的含义。
接口简述
先用最简单一句话概括接口:接口就是规定要程序做什么,但不在其中实现。
从疑问开始
或许我说完这句话,你可能就要问了,"既然接口什么都没干,那我写它干啥?"
的确,我最初也是这么想的,比如我要实现对一个HelloWorld.txt文档中的带文本"Hello"的行进行提取,我直接用python写以下代码不就好了?
with open("HelloWorld.txt", "r") as f:
lines = f.readlines()
for line in lines:
if "Hello" in line:
print(line)什么?要多次调用?那我加个函数框,将line放到lineList里返回不就好了?
def getHello(filename):
with open(filename, "r") as f:
lines = f.readlines()
for line in lines:
if "Hello" in line:
print(line)
def main():
getHello("HelloWorld.txt")
if __name__ == '__main__':
main()什么?要面向对象?那我定义一个Reader类,把函数放进去不就好了?
class Reader():
def __init__(self, filename):
self.filename = filename
def getHello(self):
with open(self.filename, "r") as f:
lines = f.readlines()
for line in lines:
if "Hello" in line:
print(line)
def main():
reader = Reader("HelloWorld.txt") # 创建一个Reader对象实例reader
reader.getHello() # 调用Reader对象的getHello()方法
if __name__ == '__main__':
main()你可能会说,你看,我根本没用到接口,也把问题解决了,不是吗?
问题在于,在实际的软件开发过程中,并不仅仅设计getHello()这样一个方法,还有许许多多的方法调来调去。比如,我们需要实现一个在机器A和机器B之间数据共享传输的应用。那么必然会有读的方法,写的方法,同步的方法,其中,同步又有实时同步,非实时同步,读写又需要读写的授权方案,这些方法的实现不是一个人就能完成的,是需要很多人配合、合作完成的。此外,一个项目的完成还包括前、后端的沟通、协作。
那么问题来了,如果你写了上述代码,领导B来了,觉得这个方法通用性太差,只能打印带有"Hello"的行,要是能指定字符串打印就好了。于是你把它改成这样。
class Reader():
def __init__(self, filename, keywords):
self.filename = filename
self.keywords = keywords
def getHello(self):
with open(self.filename, "r") as f:
lines = f.readlines()
for line in lines:
if self.keywords in line:
print(line)
def main():
reader = Reader("HelloWorld.txt", "hello") # 创建一个Reader对象实例reader
reader.getHello() # 调用Reader对象的getHello()方法
if __name__ == '__main__':
main()你把这段代码给领导看,领导说,嗯,这样就好了很多,不过方法名你怎么还是getHello()啊,改成get()更合适,于是你又去修改方法名称。过了一段时间,领导又说,你这个不要直接打印,打印了就没法做其他自定义操作了,我只要最后一行。作为字符串的列表返回不行吗?然后你又去改代码,最后,它长这样了
class Reader():
def __init__(self, filename, keywords):
self.filename = filename
self.keywords = keywords
def get(self):
lineList = list()
with open(self.filename, "r") as f:
lines = f.readlines()
for line in lines:
if self.keywords in line:
lineList.append(line)
return lineList
def main():
reader = Reader("HelloWorld.txt", "Hello") # 创建一个Reader对象实例reader
hello_lines = reader.get() # 调用Reader对象的getHello()方法
print(hello_lines[-1])
if __name__ == '__main__':
main()领导看了很满意,对你说,你跟前端那边交接下吧,然后给了你前端C的联系方式。然后C问你要TextReader接口,你懵了,接口是啥啊?(未完待续) |
|