Considere a seguinte classe TestSpan que representa um texto:

public class TextSpan implements TextItem {
 
  /** The text in this span. */
  private String _text;
 
  /**
   * @param text the text in this span.
   **/
   public TextSpan(String text) {
     _text = text;
   }
 
   /**
    * Renders the text of this TextSpan
    * @return the rendered text
    **/
    public String render() {
      return "<span>" + _text + "</span>";
    }
}


public interface TextItem {
	/**
	 * Text items can be rendered.
	 * 
	 * @return rendered text item.
	 */
	String render();
}

O método render() tem como funcionalidade devolver a cadeia de caracteres que representa o texto. 

O código actual desta classe não permite modificação do aspecto do texto, permitindo que este possa ser apresentado em negrito, itálico, sublinhado, ou em combinações variadas (e.g. negrito e itálico ou itálico sublinhado, etc.).

Pretende-se agora ter a possibilidade de poder modificar dinamicamente o aspecto de um texto sem que isso provoque alterações no código da aplicação já realizado. Represente as características gráficas da seguinte forma:

  • normal <span>normal</span>
  • negrito <b>negrito</b>
  • itálico <i>itálico</i>
  • sublinhado <u>sublinhado</u>

Qual o padrão de desenho a aplicar neste caso?

Exemplifique a aplicação do padrão escolhido para o caso do negrito e itálico.