协议主要是实现功能的扩展,又避免了继承的耦合性太强。比如说,操作系统中点击右上角的红叉关闭一个word窗口,如果当前编辑的文件没保存,就会弹出一个窗口提示你保存吧。这个功能怎么实现?显然不能由操作系统的设计者实现吧,他不可能知道某个应用程序在窗口即将被关闭时要采取什么动作。但他可以预留“关闭窗口时执行某动作”的功能,这可以通过协议来完成:他把“关闭窗口时执行某动作”的功能定义为协议中的一个方法,比如叫windowShouldClose()。在窗口类中定义一个成员变量delegate,在操作系统处理关闭窗口的代码中调用delegate.windowShouldClose() 。而编写word程序的程序员只要定义一个类声明遵守这个协议,实现windowShouldClose()方法,并把这个类传给窗口类的delegate变量,当关闭窗口时就会自动执行delegate实现的windowShouldClose()方法 |