Delegation

package Provider;
sub foo {'foo'};
sub bar {'bar'};

package Consumer;
use Moose;
has 'provider' => (
    is       => 'ro',
    isa      => 'Provider',
    handles  => [qw/foo bar/],
    required => 1,
);

Consumer->new( provider => Provider->new )->foo # Provider::foo