d
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| d [2022/03/09 13:33] – chifek | d [2023/09/14 06:06] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 27: | Line 27: | ||
| } | } | ||
| </ | </ | ||
| + | |||
| + | // | ||
| + | |||
| + | < | ||
| + | class Wife { | ||
| + | public function getFood() { | ||
| + | // ... | ||
| + | return $food; | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | В данной системе низкоранговый самец - экземпляр класса lowRankingMale жестко зависит от класса Wife причем у него даже нет возможности выбора. | ||
| + | Такая система крайне не гибкая и если придется вносить изменения, | ||
| + | Если мы создадим потомок класса Wife, то придется менять класс lowRankingMale и скорее всего другие иные классы, | ||
| + | |||
| + | // | ||
| + | |||
| + | < | ||
| + | class averageRankingMale { | ||
| + | |||
| + | private $wife; | ||
| + | |||
| + | public function __construct(Wife $wife) { | ||
| + | $this-> | ||
| + | } | ||
| + | |||
| + | public function eat() { | ||
| + | $food = $this-> | ||
| + | // ... eat | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | В этой системе среднеранговый самец уже по-умнее и может принимать разные экземпляры класса Wife. Но тем не менее у нас все равно остается жесткая зависимость от класса Wife и другой класс мы использовать не можем. | ||
| + | |||
| + | // | ||
| + | |||
| + | < | ||
| + | class highRankingMale { | ||
| + | |||
| + | private $foodProvider; | ||
| + | |||
| + | public function __construct(IFoodProvider $foodProvider) { | ||
| + | $this-> | ||
| + | } | ||
| + | |||
| + | public function eat() { | ||
| + | $food = $this-> | ||
| + | // ... eat | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | // | ||
| + | |||
| + | < | ||
| + | interface IFoodProvider { | ||
| + | public function getFood(); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | // | ||
| + | |||
| + | < | ||
| + | class Restaurant implements IFoodProvider { | ||
| + | public function getFood() { | ||
| + | // ... | ||
| + | return $food; | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | // | ||
| + | |||
| + | < | ||
| + | class Wife implements IFoodProvider{ | ||
| + | public function getFood() { | ||
| + | // ... | ||
| + | return $food; | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | А вот уже высокоранговый самец (highRankingMale) имеет полную свободу. Он не привязан ни к какому классу, | ||
| + | И для того чтобы удовлетворить потребность в еде, он может выбрать любой объект класса который реализовывает интерфейс IFoodProvider. | ||
| + | |||
| + | Выбирайте высокоранговый путь, друзья - и в коде и в жизни! )))) | ||
| + | |||
| + | |||
d.1646832820.txt.gz · Last modified: 2023/09/14 06:06 (external edit)