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.