Adapter é um padrão que é usando quando se deseja adaptar sua classe para ser usada por outro objeto.
Exemplo:
Sua tomada em casa é de 2 pinos, mas o computador é de 3 pinos então usa-se um adaptador para ligar na tomada (beijamin).
O mesmo em Software:
tenho o seguinte problema:
Preciso comparar uma array de bytes com regex. só que regex somente aceita objetos do tipo CharSequence.
byte[] sca = "helo carlos".getBytes(); Pattern p = Pattern.compile("^(?i)(helo) .+"); Matcher m = p.matcher(sca); return m.matches();
O código acima vai da erro, mas eu preciso usar array de bytes. o que fazer?
use um adaptador (Adapter) que adapta a array para ser usada como uma CharSequence,
veja a interface da charSequence:
public interface CharSequence {
int length();
char charAt(int index);
CharSequence subSequence(int start, int end);
public String toString();
}
Aqui está o adaptador:
public class CharSequenceByteArray implements CharSequence {
private byte[] buffer;
public CharSequenceByteArray(byte[] buffer) {
this.buffer = buffer;
}
public int length() {
return buffer.length;
}
public char charAt(int index) {
return (char) buffer[index];
}
public CharSequence subSequence(int start, int end) {
return new CharSequenceByteArray(Arrays.copyOfRange(buffer, start, end));
}
}
agora eu faço assim uso o adaptador:
byte[] sca = "helo carlos".getBytes();
Pattern p = Pattern.compile("^(?i)(helo) .+");
Matcher m = p.matcher(new CharSequenceByteArray(sca));
return m.matches();
Este código não da erro, porque eu adaptei uma interface em outra.
Isto é o padrão adapter.
Att. Carlos