虚其心,可解天下之问;专其心,可治天下之学;静其心,可悟天下之理;恒其心,可成天下之业。
为一个接口提供缺省实现,这样子类可以从这个缺省实现进行扩展.而不必从原有接口进行扩展.作为适配器模式的一个特例,缺省适配模式在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实现"); } } 那么在什么情况下用相信大家已经能看得出来了吧。假如你不准备实现接口的所有方法。就可以建一个抽象类来实现这个接口的所有方法,当然这里全都是空的实现.然后再写一个类继承这个抽象类就可以得到你想要的结果了.
Powered by: BlogJava Copyright © 礼物