package com.trifulcas.liskov;
public class DocumentNoLiskov {
public String Content;
// Implementa los dos métodos sin tener en cuenta
// Que clases derivadas pueden no necesitarlos
public void Read() {
System.out.println(Content);
}
public void Write(String content) {
Content = content;
}
}
package com.trifulcas.liskov;
public class ReadOnlyDocumentNoLiskov extends DocumentNoLiskov {
// Al derivar de document pero no implementar write
// Tenemos que lanzar un error
public void Write(String content) {
throw new IllegalArgumentException("Cannot write to a read-only document.");
}
}
DocumentNoLiskov a = new DocumentNoLiskov();
ReadOnlyDocumentNoLiskov b = new ReadOnlyDocumentNoLiskov();
ArrayList<DocumentNoLiskov> lista = new ArrayList<>();
lista.add(a);
lista.add(b);
// No podemos usar Liskov porque ReadOnly no implementa escritura
for (DocumentNoLiskov doc : lista) {
doc.Write("Hola"); // Lanza un error en el documento de solo lectura
}
package com.trifulcas.liskov;
public interface Readable {
public String read();
}
package com.trifulcas.liskov;
public interface Writable {
void write(String content);
}
package com.trifulcas.liskov;
public class EditableDocument implements Readable, Writable {
private String content;
@Override
public void write(String content) {
this.content = content;
}
@Override
public String read() {
return content;
}
}
package com.trifulcas.liskov;
public class ReadOnlyDocument implements Readable {
private String content;
@Override
public String read() {
// TODO Auto-generated method stub
return content;
}
}
EditableDocument e = new EditableDocument();
EditableDocument f = new EditableDocument();
ReadOnlyDocument g = new ReadOnlyDocument();
ReadOnlyDocument h = new ReadOnlyDocument();
ArrayList<Readable> leibles = new ArrayList<>();
ArrayList<Writable> editables = new ArrayList<>();
leibles.add(e);
leibles.add(f);
leibles.add(g);
leibles.add(h);
for (Readable doc : leibles) {
doc.read();
}
editables.add(e);
editables.add(f);
// No podemos añadir un documento que no se puede escribir
// editables.add(g);
for (Writable doc : editables) {
doc.write("ww");
}