Возьмем сущность телефон и действие звонить.
Как должно выглядеть это к коде клиента:
Phone phone = new CellPhone();
phone->call('number');
Теперь представь, что у разных пользователей телефоны разные:
- Сенсорные
- Кнопочные
- Стационарные кнопочные
- Стационарные дисковые и т.д.
Каждый из этих телефонов может звонить и звонить, но набор номера на каждом из них осуществляется по разному. С позиции клиента, тебе должно быть все равно, тебе главное что есть телефон, который звонит. Ты как клиент абстрагируешься от деталей, т.е. должен ли ты водить пальцем по сенсору, жать на кнопки и т.д. Тебя это волновать не должно.
Надеюсь объяснил доходчиво )))