![Dekorator](/images/patterns/cards/decorator-mini.png?id=d30458908e315af195cb183bc52dbef9)
Dekorator w języku Rust
Dekorator to strukturalny wzorzec pozwalający na dodawanie obiektom nowych obowiązków w sposób dynamiczny — poprzez “opakowywanie” ich w specjalne obiekty posiadające potrzebną funkcjonalność.
Stosując dekoratory można opakowywać obiekty wielokrotnie, gdyż zarówno obiekt docelowy jak i dekoratory są zgodne pod względem interfejsu. Wynikowy obiekt będzie posiadał ułożoną w formie stosu połączoną funkcjonalność wszystkich “opakowań”.
Input streams decoration
There is a practical example in Rust’s standard library for input/output operations.
A buffered reader decorates a vector reader adding buffered behavior.
let mut input = BufReader::new(Cursor::new("Input data"));
input.read(&mut buf).ok();
main.rs
use std::io::{BufReader, Cursor, Read};
fn main() {
let mut buf = [0u8; 10];
// A buffered reader decorates a vector reader which wraps input data.
let mut input = BufReader::new(Cursor::new("Input data"));
input.read(&mut buf).ok();
print!("Read from a buffered reader: ");
for byte in buf {
print!("{}", char::from(byte));
}
println!();
}
Output
Read from a buffered reader: Input data