We should use the withdrawal pattern or pull-over-push pattern in the following cases, when:
- You want to send ether/token to multiple addresses from the contract.
- You want to avoid the risk associated with transferring ether/token from the contract to the users.
- You want to avoid paying transaction fees as we know, the transaction initiator has to pay the transaction fee to get their transaction included in the blockchain. Hence, you may want to avoid paying transaction fees for transferring ether or token (push transaction) from the contract to your users. Instead, you want your users to pay transaction fees (pull transaction) and get their share of ether/token withdrawn from the contract.