test html
随笔-10  评论-6  文章-0  trackbacks-0
《JAVA与模式》这本书,一年前就买了,但说真的,当时真的是只看得懂字,看不明白道理!
所以当有空时我就又拿出来翻翻,这次对于第3章的软件可维护性与可复用性,特别有感触!

我也不想抛很多技术名词出来(开-闭 原则之类的),亲身经历告诉我,如果看的人不是自己明白其中的道理,那他看多了这种名词,就习惯的把他当口头语来用了,已经明白的人,自然有比我更高的认识。

所以我选择一种比较“俗”的方式,说出我的体会。(因为我就是一俗人)

还是回到接口上来吧,什么时候接口才能起作用?当你需要处理将来不断变化的需要时!

有这么一个场景:

某导演要拍个大片,然后开会时他对助手说出要找女一号,并对女一号要求如下:

1。全国知名女性;
2。有绝世容貌;
3。身材一流;

好了先说这3个吧。

助手根据要求去找来 某某女明星A,但助手知道,导演老人家不会一看就看中的,所以准备联系了女明星B,女明星C.

果然,导演开始觉得女明星A还不错,但是没过2天,觉得要换,(演艺圈的事谁说得清呢),这时助手马上有B,C来代替!

助手的工作应变十分的好,导演大大的有赏!

现在我们来简单分析下:

把导演对女明星的要求作为接口的定义。
该接口是三个特征的集合:

1。全国知名女性;
2。有绝市容貌;
3。身材一流;

导演只是根据符合这3个特征要人,而助手根据这3个特征去找人,显然女明星 A,B,C 必须同时符合这3个特征,(也就是实现了这个接口)

导演在不满意  女明星 A 后,能迅速找到 B ,C 做替换,助手自然是功不可没,但根本原因,是因为导演的要求是放在 特征的集合 上.

试想如果导演当初是指名到姓的要谁谁做女一号,然后找来又不满意了,要求这么具体,助手哪能那么快找来其他人代替?

下面开始要抛点名词了,我把这里导演的先见之明叫做 “依赖抽象”!

public interface  女一号{

    public void 全国知明女性();
    public void 有绝世容貌();
    public void 身材一流();

}

public class 女明星A implements 女一号{

    public void 全国知明女性(){
     张某某;
    }
    public void 有绝世容貌(){
    貌似天仙;
    }
    public void 身材一流(){
    三围(75c,38,80)
    }
public class 女明星B implements 女一号{

    public void 全国知明女性(){
     某某姐姐;
    }
    public void 有绝世容貌(){
    吓死路边一头牛;
    }
    public void 身材一流(){
    三围(80d,45,95);
    }

public class 女明星C implements 女一号{

    public void 全国知明女性(){
     某某神仙;
    }
    public void 有绝世容貌(){
     人见人爱;
    }
    public void 身材一流(){
    三围(70c,35,80);
    }
}






posted on 2007-05-01 12:17 我们走在JAVA的光明大道上 阅读(534) 评论(2)  编辑  收藏 所属分类: 接口的艺术

评论:
# re: 对面向接口编程的体会(2) 2007-05-02 14:44 | Qin Zhimou
很好!!!
  回复  更多评论
  
# re: 对面向接口编程的体会(2) 2007-05-03 22:03 | 扩展标记
对于接口我其实也不知道它那些具体的实现细节,但我知道它的目的,而且我觉得好象我也只想也只需知道它的目的,我就简单说吧,
这不得不先从面向对象的一个重要特性多态说起,简单说多态的目的就是为能用一个统一的接口去实现(驱动)不同的实现(各个实现这个接口的类的处理函数,这个处理函数就是接口里声明但没给出具体代码的那个函数,即名称一样),就好象用一个标准的三角插座就可给任何电器供电一样。
假设我们定义一个接口“供电系统”,“供电系统”里声明了一个方法“三角插座()”,那么实现这个接口(可理解为遵循此接口协议,就好象各电器厂商都遵守国际插座标准尺寸一样)的各种类(各类电器)就可以都只用这种统一化的"三角插座()"就行了。往后当我们设计到一个想用电的类时,就可直接去接(调用)这个三角插座(),而且要注意的是任何实现(遵循)此接口的类都可以调用相同的“三角插座()”这个接口。
说到此你可能觉得这个道理其实你也明白,主要是不明白于为什么java要那么做?这还得从人类这个东西说起,要知道这世界是以人类为主的,当然什么事都要以人为本了,人类是惰性的动物,什么都图方便,发明多态也是,你先别管它那些污七八糟的概念,其目的就是为模仿现实生活的,简单说就是标准化,说穿了也还是为了方便,总之我们生活处处是标准,目的也就想处处方便。回到编程领域也是,多态就是为达到用一个统一的动作(如相同的接口名)来达到驱动多种机器的目的,就好象一个标准的三角插座就可驱动所有遵守此插座协议的电器一样,这就是目的,那么回到手段就是编译器的事了,java采用了独立化的接口的方式(注:有些语言并没有突出接口的概念,比如c++的抽象也可以实现同样功能),这也不过是java实现以上目的的手段而已,你别追究它为什么这样,这是它的方式,你就管记住那段几乎是固定化的实现接口的代码块。
重申一次:弄清它的目的,别管它用什么手段,把它背下来得了。
  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 
test html.....