Refactoring:
1) use composite to replace inherit for push client;
2) prepare for adding more http client implementaiton.