原创博客,转载请注明出处。
相信小伙伴们都知道面向接口编程的好处,这里我不再叙述。重点是怎么理解这种困扰新手的方式。编程嘛,肯定是为了解决实际问题,如果不能很好的和生活中的事例相结合,单纯炫技把代码弄得很复杂,我是不推荐的。
废话不多说,先来看一段代码:
public interface JustInterface { void justMethod(Object object); } public class JustInterface Impl implements JustInterface{ @Override public void justMethod(Object object) { // TODO Auto-generated method stub do something… } } // 在Main.class里可以这样声明和初始化: public static void main( String[] args ) { JustInterface justInterface = new JustInterfaceImpl(); justInterface.justMethod; } 复制代码
对于这段挺正经的面向接口编程的代码,包括我自己,也一直处于似懂非懂的状态,但是具体为什么会出现这种方式,我一定要想清楚才会安心。
接下来请允许我用一个很俗的例子来说明这种方式。
故事是这样的,双手受伤的独居宅男,想吃放在面前饭桌上的青椒炒牛肉。(别问为什么,宅男就是要吃青椒炒牛肉,也别问哪来的青椒炒牛肉,继续看就行了),我们需要一种方法,最好是人机接口,可以帮助这位宅男不用手轻松吃到青椒炒牛肉。
市面上有一种机械臂,他对外提供了一个人机接口。而接口里面有一个方法,这个方法听起来很符合宅男的要求:夹起机械臂面前的物体-移动到指定坐标点-然后松开。看来只需要把这个机械臂放在饭桌上就行了。
于是双手受伤的独居宅男买了一个机械臂(怎么买的,你不用知道),想通过这个机械臂来吃青椒炒牛肉。整个欢喜的过程如下:
// 在机械臂公司里的组装线是这样的: public interface 人机接口 { void 传递物体(宅男嘴里的位置); } public class 机械臂 implements 人机接口 { @Override public void 传递物体(宅男嘴里的位置) { 夹起机械臂面前的物体; 移动到 宅男嘴里的位置; 松开物体; } } // 在宅男家里: main 函数 { 人机接口 = new 机械臂; //宅男准备开始使用带有人机接口的实现了传递物体方法的机械臂 机械臂.传递物体(宅男嘴里的位置); //机械臂夹起了放在面前的青椒炒牛肉,移动到宅男嘴里的位置,然后松开了青椒炒牛肉。 } 复制代码
对比一下文章开头给出的代码:
public interface JustInterface { void justMethod(Object object); } public class JustInterface Impl implements JustInterface{ @Override public void justMethod(Object object) { // TODO Auto-generated method stub do something… } } // 在Main.class里可以这样声明和初始化: public static void main( String[] args ) { JustInterface justInterface = new JustInterfaceImpl(); justInterface.justMethod; } 复制代码
怎么样,这样的通俗事例对于理解是不是简单多了?和实际结合起来解决问题,我觉得是编程的首要核心。 至于宅男为什么不把头埋下去用嘴直接吃青椒炒牛肉呢?可能是长期玩游戏,脖子僵硬吧。
后记:宅男在机械臂的包装盒子里发现了一份迷之说明书,在说明上发现了如何设置机械臂的动作,于是邪恶的思想涌入了宅男的大脑。。。