Solution (source code)

= Solution

The <Decorator pattern> participants are:

* `CableTV`: the component <object interface>, declaring the price and package description visible to clients.
* `BasicPlan`: the concrete component, supplying the initial £30 account and its description.
* `Packages`: the abstract <decorator object>, storing one component and forwarding its queries.
* `Movies` and `HDChannels`, and the extension `Sports`: concrete <decorator objects>, adding respectively £10, £7, and £5 and appending their labels.

The checking application is the client that chooses and nests these participants. \b[The common `CableTV` interface makes a decorated account usable wherever a basic account is usable], while the nested <object composition> determines its accumulated behavior.