缺省适配模式为一个接口提供缺省实现,这样子类型可以从这个缺省实现进行扩展,而不必从原有接口进行扩展
一:鲁智深的故事
和尚要做什么?念经,打坐,习武..如果设计一个和尚接口,给出所有的和尚都需要实现的方法:
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.......
分享到:
相关推荐
用Adapter模式设计一个仿生机器人: 要求机器人可以模拟各种动物行为,在机器人中定义了一系列方法,如机器人叫喊方法cry()、机器人移动方法move()等。如果希望在不修改已有代码的基础上使得机器人能够像狗一样汪汪叫...
对于缺省适配模式,其通常用于一个接口有大量方法而只需要实现其中一部分方法的情况。通过为这些方法提供默认的空实现,子类可以选择性地覆盖需要的方法,而不必实现接口中的所有方法。这种模式提高了代码的可重用性...
适配器模式的核心优势在于灵活性和可扩展性,它使得旧的代码或第三方库能够在新的系统中正常工作,同时也降低了耦合度。在实际开发中,适配器模式常用于API接口的转换、硬件设备的驱动程序等场景。通过适配器,我们...
#### 三、结构型模式 结构型模式关注如何将类或对象结合在一起形成更大的结构。 ##### 1. 适配器模式 **定义**: 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的...
- **缺省适配**(Default Adapter):可能是默认适配器模式,允许一个类实现接口中的一部分或全部方法,而不用实现所有方法。 - **合成**(Composite):合成模式将对象组合成树形结构以表示“部分-整体”的层次...
本文将详细介绍23种经典的设计模式,这些模式被分为三大类:创建型模式、结构型模式和行为型模式。 #### 二、创建型模式 **1. 工厂方法模式** - **定义**:定义一个用于创建对象的接口,让子类决定实例化哪一个类...
- 对象适配器模式:通过在Adapter类中持有一个Adaptee类的实例,并在Adapter类的方法中调用Adaptee实例的方法来实现。这种模式的优点是不需要修改Adaptee类的接口,而且更灵活,缺点是只能获得Adaptee实例的接口。 -...
根据功能和用途的不同,这23种设计模式可以分为三类: 1. **创建型模式**:关注对象的创建方式。 2. **结构型模式**:关注如何将类或对象结合在一起形成更大的结构。 3. **行为型模式**:关注对象之间的职责分配。 ...
以下是一些主要的创建型模式: ##### 1.1.1 工厂方法模式 - **定义**:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 - **适用性**: - 当一个类不知道它所...
Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象;可以调用工厂方法以创建一个Product对象。 - **ConcreteCreator**:重定义工厂方法以返回一个ConcreteProduct实例。 **示例**: `...
DateUtils是一个日期工具类,适用于jdk8版本以上,支持不同格式的LocalDateTime,已经不同的LocalDate,且自动适配缺省的模式
2. **主要功能拓展**:路由器的功能不仅限于速率适配、子网协议转换和报文分片与重组,但不包括七层协议转换,因为这超出了网络层的功能范围,涉及到应用层的处理。 ### 路由表与协议 3. **路由表的动态生成**:...
这种方式被称为**缺省适配模式**,它可以减少子类需要重写的方法数量,简化子类的实现,同时保持良好的扩展性和维护性。 #### 五、依赖倒置原则的局限性 尽管依赖倒置原则有很多优点,但它也有一些局限性: - 使用...
4. **经典设计模式**:“缺省适配模式”: - 结合`abstract class`和`interface`的优点,可以通过定义一个`interface`并在其下方定义一个实现该接口的`abstract class`来达到最佳效果。 - 这样既确保了接口的灵活...
这些工作空间确保了在不同调试场景下,调试器能够快速适配到相应的调试环境和配置中。 工作空间保存的信息涵盖了调试会话状态,比如断点、打开的源文件、用户定义的别名等;调试器设置,包括符号文件路径、可执行...
- 通过配置内存控制器的相关寄存器,如总线宽度、等待周期等,来适配不同类型的存储器。 - **初始化各模式下的栈指针:** - 为每种处理器模式(如用户模式、管理模式等)设置相应的栈基址寄存器(SPSR)值,这些...