Question: How to modify classic strategy pattern in case when each ConcreteStrategy talks to DataStorage? There are different types of data storage and the interface depends on the concrete strategy.

Answer: 
Make your strategies dependent on DataStorage via constructor injection. Then each strategy can use DataStorage as they please.

If DataStorage implements many interfaces, make each strategy dependent on that particular interface.
A brief answer could be:

First Define your common interfaces for data storage like:

```
Query()
Update()
Delete()
Add()
Create()

```

Second, implement these interfaces in each concrete data storage implementation class.

When you use these class objects, you call the method via interface methods, the real task carrier is the specific object.