Em relação ao padrão decorator, eu fiquei em duvida, pois temos duas classes abstratas: InputStream e Reader. No caso usamos a classe que que implementa o InputStream para receber os dados de alguma forma(arquivo, rede ou sistema) e as classes que implementam Reader para transforma os dados binários em chars e os chars em Strings. O padrão decorator não necessariamente precisa ter todas suas classes implementando e trabalhando com classes que implementam a mesma interface ?