Не думайте, что шаблон Decorator делает то, что вы от него хотите.Декоратор добавляет новые функциональные возможности поверх оригинального класса.Типичный пример вики сказал бы, что мы можем добавить полосу прокрутки, строку меню, оверлеи и другие компоненты пользовательского интерфейса поверх холста.Таким образом, чтобы создать правильное окно браузера, у вас будет:
public class Canvas
public class ScrollableCanvas
public class OverlayedCanvas
etc.
, чтобы мы добавили больше функций к оригинальному Canvas.
Чтобы решить вашу проблему, у вас должно быть что-то вроде:
public abstract class LoyaltyProgramAccount {...}
public class RewardAccount extends LoyaltyProgramAccount {...}
public class MilesAccount extends LoyaltyProgramAccount {...}
И затем добавьте перечисление регистрации:
public enum LoyaltyProgramTypes {
miles,
reward,
}
и затем пусть пользователь будет:
public class Customer {
private List<LoyaltyProgramTypes, LoyaltyProgramAccount> accounts;
public void openAccount(LoyaltyProgramTypes type, LoyaltyProgramAccount account) {
accounts.put(type, account);
}
...
}