Descrição do Problema


Considere que tem uma aplicação bancária. A entidade BankAccount representa uma conta bancária nesta aplicação. Esta entidade suporta as operações de levantar, depositar e obter saldo e suporta a seguinte interface:
public interface IBankAccount {
     void withdraw(int amount);
     void deposit(int amount);
     int getBalance();
}

Suponha agora que podem ser adicionados novos comportamentos a esta classe. Por exemplo, conta bancária em vigilância, em que qualquer operação que altere o saldo de uma conta bancária vigiada deve ser registada através da invocação do método estático register(BankAccount ac, boolean isDeposit, int amount) da classe BankSupervision. Uma conta pode ter vários comportamentos adicionados. Diferentes contas podem ter diferentes comportamentos adicionados.

Solução

Faça a sua solução primeiro e depois compare com a sugerida.