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