缺省适配模式为一个接口提供缺省实现,这样子类型可以从这个缺省实现进行扩展,而不必从原有接口进行扩展
一:鲁智深的故事
和尚要做什么?念经,打坐,习武..如果设计一个和尚接口,给出所有的和尚都需要实现的方法:
interface和尚{
public void念经();
pulbic void打坐();
public void习武();
public String getName();
...................
}
如果这样的话,所有的和尚类都应当实现接口所定义的全部方法,如:
class鲁智深implements和尚{
public void习武(){
拳打镇关西;
大闹五台山;
...........
}
public String getName(){
return "鲁智深";
}
}
这样的话鲁智深当然连Java的编译器都通不过,鲁智深只有实现和尚里有的方法。这样一来,鲁智深便不再是鲁智深了。当初鲁达剃度,众僧说:"这个人形容丑陋,相貌凶顽,不可剃度他",但是长老却说:"此人上应天星,心地刚直,虽然时下凶顽,命中驳杂,久后却得清净。证果非凡,汝等皆不及他"。原来如此,大师高见,用我们OO的语言来说,"应"者,实现也,"天星"者,抽象类也,代码如下:
abstract class天星implements和尚{
public void念经(){}
pulbic void打坐(){}
public void习武(){}
public String getName(){return null;}
}
class鲁智深extends天星{
public void习武(){
拳打镇关西;
大闹五台山;
...........
}
public String getName(){
return "鲁智深";
}
}
这样一来,鲁智深可以只实现它所需要的方法(在这里,我觉得确切地说,是没有直接实现不需要的方法,他还是继承有其他和尚的方法啊)
这个抽象的天星类便是一个适配器类,鲁智深实际上借助于适配器模式达到了剃度的目的。此适配器类实现了和尚接口所要求的所有方法,但是与通常适配器模式不同的是,此适配器类给出的所有的方法的实现都是"平庸"的。这种"平庸化"的适配模式称做缺省适配模式。
二:WindowAdapter是缺省适配器模式
我们知道WindowListener接口里定义了七个方法:
public interface WindowListener extends EventListener{
public void windowOpened(WindowEvent e);
public void windowClosing(WindowEvent e);
public void windowClosed(WindowEvent e);
public void windowIconified(WindowEvent e);
public void windowDeiconified(WindowEvent e);
public void windowActivated(WindowEvent e);
public void windowDeactivated(WindowEvent e);
}
如果下面我们的程序是这样写:
class AppletFrame extends Frame implement WindowListener{
public void windowOpened(WindowEvent e){}
public void windowClosing(WindowEvent e){}
public void windowClosed(WindowEvent e){}
public void windowIconified(WindowEvent e){}
public void windowDeiconified(WindowEvent e){}
public void windowActivated(WindowEvent e){}
public void windowDeactivated(WindowEvent e){
this.setVisible(false);
dispose();
System.exit(0);
}
}
如果你写这个程序会不会觉得其余的六个方法我都不需要啊,可我还要来个空实现,我要的简洁美呢?所你你不用担心,sun还是贴心的,提供了一个WindowListener的适配器WindowAdapter,它的代码如下:
public abstract class WindowAdapter implements WindowListener{
public void windowOpened(WindowEvent e){}
public void windowClosing(WindowEvent e){}
public void windowClosed(WindowEvent e){}
public void windowIconified(WindowEvent e){}
public void windowDeiconified(WindowEvent e){}
public void windowActivated(WindowEvent e){}
public void windowDeactivated(WindowEvent e){}
}
这样我们的AppletFrame只要继承WindowAdapter并重写需要的方法就好了。 。
适配器模式的用意是要改变源的接口,以便与目标类的接口相容。缺省适配的用意稍有不同,它是为了方便建立一个不平庸的适配器类而提供一种平庸的实现。
任何时候如果不准备实现一个接口的所有方法时,就可以模仿WindowAdapter的做法制造一个抽象类,给出所有方法的平庸的具体实现,这样,从这个抽象类再继承下去的子类就不必实现所有的方法了.
J2SE中还有ComponentAdapter,FocusAdapter,KeyAdapter,MouseAdapter.......
分享到:
相关推荐
一个简易的Money运算程序。定义一个Money类:缺省函数,重载运算符
用Adapter模式设计一个仿生机器人: 要求机器人可以模拟各种动物行为,在机器人中定义了一系列方法,如机器人叫喊方法cry()、机器人移动方法move()等。如果希望在不修改已有代码的基础上使得机器人能够像狗一样汪汪叫...
1:模式的简史和形而上学;2:统一建模语言UML简介;3:软件的可维护性与可复用性;4:开-闭 原则;5:java语言接口;...23:缺省适配器模式;24:合成模式;25:装饰模式;26:设计模式在JAVA I/O设计原则;28:代理模式;....
一些书籍也称适配器模式为缺省适配器模式(Default Adapter Pattern) 。 适配器模式主要分 为三类: 类适配器模式、 对象适配器模式、 接口适配器模式。 以生活中手机充电为例来讲解适配器模式, 手机本身并不能...
本人自己实现的比较完整的发布订阅者模式,不过发布消息时是同步调用。并且在实现过程中使用了单例模式与缺省适配器模式。
源代码清单(按照库排列) com.javapatterns.abstractfactory 抽象工厂模式 ...com.javapatterns.windowadapter 缺省适配模式 com.javapatterns.xmlproperties 专题:适配器模式与XMLProperties
1.创建模式:工厂方法、简单工厂、抽象工厂、单例、建造、模型 2.结构模式:适配器、缺省适配、合成、装饰、代理、享元、门面、桥梁 3.行为模式:不变、策略、模板
三、路由协议——直连路由、静态路由、缺省路由、路由优先级和路由度量、路由冗余和备份(浮动静态路由)文章拓扑资源:缺省路由配置
// lpszFileName:缺省显示在文件名组合框的编辑框的文件名,一般可选NULL // // dwFlags:对话框风格,一般为OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 即隐藏只读选项和覆盖已有文件前提示。
Source Insight的缺省样式设置 GLOBAL.CF3是一个已设置好的样式,直导入,进入 options->Load Configration 后点Load 按钮(这是全局的设置,'options->style properties'是局部的)
经常看到函数定义时有好多参数,但实际调用时却只用到其中几个参数,研究老半天终于明白了
jdk1.6免安装版里面的缺省zip文件
CCNA相关实验内容:实验04:静态路由、缺省路由的配制.rar
行业分类-设备装置-指示将设备转变到缺省状态的协议适配层(PAL)通信的装置、系统和方法
计算机网络实验报告——静态路由与缺省路由的使用.pdf
c++之第五函数重载与缺省参数c++之第五函数重载与缺省参数c++之第五函数重载与缺省参数c++之第五函数重载与缺省参数
适配器(Adaper)角色public class Adapter extends Adaptee implements Target { /** * 由于源类
S系列交换机缺省帐号与密码.zip
用于sublime功能的缺省文件,可以打开install packages.
VC、UITableView 常用缺省页、loading页