Adaptor and Visitor and Template patterns