В проекте я видел код, написанный бывшим сотрудником. Человек назвал его как реализацию шаблона адаптера, но я не уверен. Вот код:Действительно ли это шаблон адаптера?
public class RowSetAdaptor implements java.io.Serializable {
private javax.sql.rowset.CachedRowSet cachedRowSet;
public RowSetAdaptor() throw SQLException {
cachedRowSet = new com.sun.rowset.CachedRowSetImpl();
}
public void populate(ResultSet resultSet) throw SQLException {
cachedRowSet.populate(resultSet);
}
public boolean next() throw SQLException {
cachedRowSet.next();
}
.... // different methods all using cachedRowSet
}
Как я вижу это класс RowSetAdaptor
ограничивает доступ к CachedRowSet
интерфейсу не все методы CachedRowSet
интерфейса доступны в RowSetAdaptor
классе. Действительно ли это шаблон адаптера? Если нет, то какой шаблон дизайна используется здесь?
Update [24 февраля 2015]
Благодаря @JB Nizet, @Fuhrmanator, @ Гюнтер Франке, @vikingsteve и @Giovanni Ботта для ваших ответов.
Что делать, если я делаю следующие изменения, чтобы сделать его образцом адаптера?
public interface RowSetI {
public boolean next() throws SQLException;
...
}
public class CachedRowSetAdapter implements RowSetI {
private javax.sql.rowset.CachedRowSet cachedRowSet;
public CachedRowSetAdapter() throw SQLException {
cachedRowSet = new com.sun.rowset.CachedRowSetImpl();
}
public void populate(ResultSet resultSet) throw SQLException {
cachedRowSet.populate(resultSet);
}
public boolean next() throw SQLException {
cachedRowSet.next();
}
...
}
public class JdbcRowSetAdapter implements RowSetI {
private javax.sql.rowset.JdbcRowSet jdbcRowSet;
public JdbcRowSetAdapter() throw SQLException {
jdbcRowSet = new com.sun.rowset.JdbcRowSetImpl();
}
public void populate(ResultSet resultSet) throw SQLException {
jdbcRowSet.populate(resultSet);
}
public boolean next() throw SQLException {
jdbcRowSet.next();
}
...
}
ТИА
Это не адаптер, так как он не адаптировать интерфейс к другому интерфейсу. Это ... не какая-то картина. –
2 ответы ниже говорят, что это шаблон адаптера. Можете ли вы дать свой ответ о том, почему эти 2 ответа неверны? – srh
IMO, ответ vikingsteve имеет слишком широкую интерпретацию шаблона адаптера. Для меня шаблон адаптера следующий: мне нужно вызвать метод, который принимает интерфейс A в качестве аргумента с экземпляром B, который не реализует A. Поэтому я пишу класс, который реализует A, делегируя объект типа B. В этом смысле, если целью действительно является Сериализуемость, вы можете утверждать, что ответ Джованни верен. Но я не уверен, что это намерение автора. –