Difference between revisions of "Decorator Pattern (padrão de desenho)/Exercício 1: Textos Formatados"

From Wiki**3

< Decorator Pattern (padrão de desenho)
(Class Underline)
(Class App)
Line 196: Line 196:
 
Simple demo application.
 
Simple demo application.
  
 +
{{CollapsedCode|Ficheiro '''App.java'''|
 
<java5>
 
<java5>
 
public class App {
 
public class App {
Line 214: Line 215:
 
}
 
}
 
</java5>
 
</java5>
 +
}}
  
 
= Compiling and Running =
 
= Compiling and Running =

Revision as of 12:24, 1 September 2015

Problema

Um texto é constituído por palavras. Quando o texto é apresentado, através do método render, cada palavra pode aparecer sem qualquer modificação de aspecto (utiliza-se o método render correspondente). É ainda possível modificar dinamicamente o aspecto das palavras, permitindo que sejam apresentadas em negrito, itálico, sublinhado, ou em combinações variadas (e.g. negrito e itálico ou itálico sublinhado, etc.). No entanto, a apresentação é sempre realizada da mesma forma (sempre através do método render).

Além de apresentável graficamente, um texto pode ser convertido numa cadeia de caracteres, contendo a sua informação textual (String). Esta operação é realizada através do método text (invocado sobre cada um dos elementos designados acima).

Implemente as classes que permitem representar o texto completo, as palavras, respectivas modificações gráficas. Implemente ainda uma aplicação que ilustre o comportamento. 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>

Solução

A solução apresentada abaixo não contempla o método text. Deixa-se como exercício para o leitor.

Diagrama UML

Este diagrama corresponde às classes abaixo definidas. Note-se queo método render está declarado em todas as classes. Não foi representado em algumas por simplicidade.

Diagrama de classes

Decorator-ex1.png

Interface TextItem

Esta interface representa um item textual genérico, formatado ou não.

Ficheiro TextItem.java

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

Class TextSpan

A text span contains some text.

Ficheiro TextSpan.java
{{{2}}}

Class TextFormat

The abstract format (root class for other formatting items). A text format may be applied to any text item.

Ficheiro TextFormat.java
{{{2}}}

Class Bold

Bold format.

Ficheiro Bold.java

<java5> public class Bold extends TextFormat {

/** * @param textItem the text item to format. */ public Bold(TextItem textItem) { super(textItem); }

/** * @see TextItem#render() */ @Override public String render() { return "" + super.render() + ""; }

} </java5>

Class Italic

Italic format.

Ficheiro Italic.java

<java5> public class Italic extends TextFormat {

/** * @param textItem the text item to format. */ public Italic(TextItem textItem) { super(textItem); }

/** * @see TextItem#render() */ @Override public String render() { return "" + super.render() + ""; }

} </java5>

Class Underline

Underline format.

Ficheiro Underline.java

<java5> public class Underline extends TextFormat {

/** * @param textItem the text item to format. */ public Underline(TextItem textItem) { super(textItem); }

/** * @see TextItem#render() */ @Override public String render() { return "" + super.render() + ""; }

} </java5>

Class App

Simple demo application.

Ficheiro App.java
{{{2}}}

Compiling and Running