PrintBuffer (Dekorátor)

Cvičení

Návrhové vzory

SSŠVT


PrintBuffer (Dekorátor)

1. Ve VS založte konzolový projekt PrintBufferCon.

2. Vytvořte třídu PrintBuffer, která se bude chovat jako tiskový buffer pro výpisy na konzoli.

3. Třída PrintBuffer bude mít 3 veřejné nestatické metody:

4. Jako interní buffer můžete použít např. StringBuilder, List<char> nebo char[].

5. Metodu ToConsole může zavolat klientský kód, který vaše API třídy PrintBuffer používá, ale může ji zavolat i sám PrintBuffer, pokud usoudí, že jeho buffer je už příliš "plný" a je třeba ho vyprázdnit, aby byl připraven pro další požavky Print a PrintLine.

6. Do metody Main hlavní třídy Program zapište klientský kód, který otestuje PrintBuffer. Jako testovací data použijte soubory printbuffer-input-01.txt a printbuffer-input-02.txt.

7. Po úspěšném otestování PrintBuffer-u vytvořte třídu ColorPrintDecorator, která bude dekorovat PrintBuffer. Použijte návrhový vzor Decorator.

8. Objekt ColorPrintDecorator se bude chovat stejně jako PrintBuffer (bude přeposílat volání metod Print, PrintLine a ToConsole do PrintBuffer-u, který bude v něm zapouzdřený), až na to, že když narazí na tzv. escape sekvenci, změní barvu písma konzole. Escape sekvenci v textu pozná tento dekorátor tak, že je uvozena znakem ° (stupeň), za kterým následuje jeden ze znaků 0-9 nebo A-F nebo a-f (hexadecimální číslice). Hexadecimální číslice reprezentuje barvu popředí, která má být nastavena.

Konzolové barvy jsou definovány ve vyjmenovaném typu ConsoleColor. Zmíněná hexadecimální číslice by měla odpovídat kódu konstanty z toho enumu. Např.:

Hexadecimální kód z escape sekvence Dekadicky Konstanta z enumu Barva
0 0 Black černá
7 7 Gray šedá
9 9 Blue modrá
A 10 Green zelená
B 11 Cyan modrozelená
F 15 White bílá

9. Že ColorPrintDecorator funguje správně, ověřte na souboru printbuffer-input-03.txt.