Terry.Li-彬

虚其心,可解天下之问;专其心,可治天下之学;静其心,可悟天下之理;恒其心,可成天下之业。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  143 随笔 :: 344 文章 :: 130 评论 :: 0 Trackbacks

为一个接口提供缺省实现,这样子类可以从这个缺省实现进行扩展.而不必从原有接口进行扩展.作为适配器模式的一个特例,缺省适配模式在java语言中有着特殊的应用.(引用java模式书)

adapter是一个非常常用的设计模式.
像windows的每个窗口,事件很多个.关闭,移动,最大化,最小化,
java代码设计如下:
interface 窗口{
public void 关闭();
public void 移动();
public ovid 最大化();
...
...
}
如果客户点击了关闭按钮,java类实现如下:
Frame implements 窗口{
public void 关闭(){
System.out.println("关闭窗口");
}

public void 移动()[
}
public ovid 最大化(){
}
...
...
}
这里面我们可以看出,我们关注的只有关闭按钮触发的事件,其它的我们不用管.但是在java类中,我们必须把接口的所有方法都给实现.这样我们连一些没有用的方法也得给实现.那怕是空实现.


下面我们来建一个抽象类来实现这个接口.
public abstract Frame implements 窗口{
public void 关闭(){

}

public void 移动(){
}
public ovid 最大化(){
}
...
...
}
这里我们可以看出,抽象类给每个接口一个空的实现,那我们都可以在抽象类的基础上进行扩展。关闭功能实现如下:
public CloseFrame extends Frame{
public void 关闭(){
System.out.println("关闭窗口");

}
}

像在java中的事件处理都是用适配器模式来实现的。接口,抽象类都是已经写好的。我们只需要实现具体功能的类就可以了。

再举个简单的例子:
假如存在如下接口:
interface TestInterface{
void test1();
void test2();
void test3();
}
如果我们只关注test1接口应该怎样写呢。
abstract class TestAbstract implements Test{
public void test1(){
}
public void test2(){
}
public void test3(){
}
}
class TestTest1 extends TestAbstract{
public void test1(){
System.out.println("方法1实现");
}
}
那么在什么情况下用相信大家已经能看得出来了吧。假如你不准备实现接口的所有方法。就可以建一个抽象类来实现这个接口的所有方法,当然这里全都是空的实现.然后再写一个类继承这个抽象类就可以得到你想要的结果了.

 

 
 1package com.lucky.util;
 2
 3import java.util.Collection;
 4
 5public interface IAdapterMode {
 6    
 7    public void print();
 8
 9    public boolean insert(Object instance);
10    
11    public boolean delete(Object instance);
12    
13    public boolean update(Object instance);
14    
15    public Collection find(String sql);
16}

17
 1package com.lucky.util;
 2
 3import java.lang.reflect.Method;
 4import java.lang.reflect.Proxy;
 5import java.util.Collection;
 6
 7public abstract class AdapterModeAbstract implements IAdapterMode {
 8    
 9    public void print() {
10        // TODO Auto-generated method stub
11        System.out.println("调用了print");
12    }

13
14    public boolean delete(Object instance) {
15        // TODO Auto-generated method stub
16        return false;
17    }

18
19    public Collection find(String sql) {
20        // TODO Auto-generated method stub
21        return null;
22    }

23
24    public boolean insert(Object instance) {
25        // TODO Auto-generated method stub
26        return false;
27    }

28
29    public boolean update(Object instance) {
30        // TODO Auto-generated method stub
31        return false;
32    }

33    
34}

35
posted on 2007-09-23 11:35 礼物 阅读(180) 评论(0)  编辑  收藏

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

网站导航: