Delegation

package Provider;
sub foo {'this is Provider::foo'};
sub bar {'this is Provider::bar'};

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

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