适配器模式的宗旨是:保留现有类提供的服务,向客户提供接口,使得原本接口不兼容而功能相同的类一起工作。客户提供接口让实现一些个功能,而我们已经有类实现了相同的功能,但是两者的接口是不兼容的。现在可以实现一个新的类,利用已有类的功能去实现客户所希望的功能。
分为类适配与对象适配。
类适配:新的类继承已有类而实现期望的接口:
class NewClass extends SomeClass implements interface{};
对象适配:新类继承客户所期望的类,而在内部组合已有的类,也就是将已有类作为自己的属性,利用已有类的方法实现所继承下来的方法。
class NewClass extends ClientClass {
SomeClass someClass;
...
public void ClientMethod(...) {
someClass.someMethod(...);
...
}
}
忽然想起前不久看到的组合与继承。类适配用到了继承的方法,而对象适配呢用到了组合的方法。为什么对象适配不能用继承了,因为它已继承了ClientClass类,java不支持多重继承,所以不能再继承现有的类。那么直接都用类适配就行了嘛,考虑这样的情况,你需要用到很多(多于一个就行)现有类来实现功能,而这个时候是不能用继承的,可以将所有的这些类组合进新类里面来完成任务。
对象适配的一个应用:JTable。需要实现自己的表格模型时,有一个TableModel接口,而通常是继承其下的一个AbstractTableModel类。实现自己的表格模型类需要提供getColumnCount(),getRowCount(),getValueAt(int, int)方法,可以利用现有的一些类,如存储从数据库查询的记录的ResultSet,利用ResultSet的方法实现这三个方法。
class MyTableModel extends AbstractTableModel {
private Result rs;
...
public int getColumnCount() {
...
rs.method();
...
}
...getRowCount()...getValueAt(int, int)...
}
参考:java设计模式(adapter),java编程思想(组合继承),java核心技术(swing table)
分为类适配与对象适配。
类适配:新的类继承已有类而实现期望的接口:
class NewClass extends SomeClass implements interface{};
对象适配:新类继承客户所期望的类,而在内部组合已有的类,也就是将已有类作为自己的属性,利用已有类的方法实现所继承下来的方法。
class NewClass extends ClientClass {
SomeClass someClass;
...
public void ClientMethod(...) {
someClass.someMethod(...);
...
}
}
忽然想起前不久看到的组合与继承。类适配用到了继承的方法,而对象适配呢用到了组合的方法。为什么对象适配不能用继承了,因为它已继承了ClientClass类,java不支持多重继承,所以不能再继承现有的类。那么直接都用类适配就行了嘛,考虑这样的情况,你需要用到很多(多于一个就行)现有类来实现功能,而这个时候是不能用继承的,可以将所有的这些类组合进新类里面来完成任务。
对象适配的一个应用:JTable。需要实现自己的表格模型时,有一个TableModel接口,而通常是继承其下的一个AbstractTableModel类。实现自己的表格模型类需要提供getColumnCount(),getRowCount(),getValueAt(int, int)方法,可以利用现有的一些类,如存储从数据库查询的记录的ResultSet,利用ResultSet的方法实现这三个方法。
class MyTableModel extends AbstractTableModel {
private Result rs;
...
public int getColumnCount() {
...
rs.method();
...
}
...getRowCount()...getValueAt(int, int)...
}
参考:java设计模式(adapter),java编程思想(组合继承),java核心技术(swing table)