Я написал простой код. В первом случаи использовал интерфейс а во втором простое наследование классов и методов. По сути одно и то же. В обоих случаях классы Key1 и Key2 имеют два типа, свой и унаследованный от интерфейса или во втором случаи от родителя.
# Ну отделил я реализацию от представления и че? Получается дублирование.
interface Key {
public function open();
}
class Key1 implements Key {
public function open() {
$this->insert();
$this->turn();
$this->ex();
}
public function insert() {
# ..
}
public function turn() {
# ..
}
public function ex() {
# ..
}
}
class Key2 implements Key {
public function open() {
$this->insert();
$this->act();
$this->ex();
}
public function insert() {
# ..
}
public function act() {
# ..
}
public function ex() {
# ..
}
}
И наследованием
abstract class Key {
protected function open() {
$this->insert();
$this->ex();
}
public function insert() {
# ..
}
public function ex() {
# ..
}
}
class Key1 extends Key {
public function open() {
parent::open();
$this->turn();
}
public function turn() {
# ..
}
}
class Key2 extends Key {
public function open() {
parent::open();
$this->act();
}
public function act() {
# ..
}
}