Suponha que tem a seguinte classe Document (que representa um documento de texto):
public class Document {Esta classe tem um custo de manutenção alto devido ao facto de ter que se preocupar com os diferentes formatos de saída suportados. Além disso, caso se queira suportar novos formatos de saída, isto implicará alterações na própria classe, não se seguindo assim o princípio do aberto/fechado.
private String _text;
private DocumentFormat _format;
...
public void setWritingFormat(DocumentFormat format) {
_format = format;
}
/**
* Writes this document into the specified format.
**/
public void write() {
if (_format == WORD) {
// write document into word format
} else if (_format == RTF) {
// write document into RTF format
} else if ... // code for other formats
}
}
Aplique o padrão de desenho correcto que resolve estes problemas. Exemplifique a aplicação do padrão escolhido realizando as alterações necessárias à classe Document e considerando apenas a escrita de um documento no formato Word. Por razões de simplificação, considere que a escrita de um documento neste formato se resume apenas a escrever a cadeia de caracteres "Formato Word" para o terminal.