※ 引述《MephistoH (默非斯托)》之铭言:
: 动物会叫, 但各有各的叫法
: 在叫的时候, 就用接口~
: "其实abstract class表示的是"is a"关系,interface表示的是"like a"关系
第一次看到 like-a ...
不认为 interface 是 like-a ...
直接提我实作的看法及个人经验,如有错误欢迎指证
目前实作上会用到 abstract 通常都是 Template Method 模式
从良葛格网站例子的 GuessGame 来看就明白
http://openhome.cc/Gossip/DesignPattern/TemplateMethod.htm
而我通常不会以 abstract class 当作顶层 class
(当然也是会有 abstract class 当顶层的时候)
我的话会制作一个 interface Game,有个方法 go()
GuessGame 会 implements Game
而玩 game 就会是
Game myGame = new ConsoleGame();
myGame.go();
若你有其他模式的 Game 如 PartyGame
你也可以 implements Game 做自己的 Party template
game 要可以玩 (go),或是要可以读取进度 (load),都是一个行为
自然就是 inteface 定义行为
而 GuessGame 或 PartyGame 是 template,自然就是 abstract
如果你有用到一些open source,他们class结构通常都是如此
用 abstract 当作 template 去 implements interface
例子1: spring LDAP: http://goo.gl/P4Ycq6
例子2: DBUnit: http://goo.gl/IeP9Md