<?php abstract class Character { public $WeaponBehavior; public $weapon; public function fight(){ $this->WeaponBehavior->useWeapon(); } public function setWeapon($w){ $this->WeaponBehavior=$w; } } interface WeaponBehavior { public function useWeapon(); } class KnifeBehavior implements WeaponBehavior { public function useWeapon(){ echo 'knife is my weapon'; } } class BowAndArrowBehavior implements WeaponBehavior { public function useWeapon(){ echo 'Bow and Arrow is my weapon'; } } class AxeBehavior implements WeaponBehavior { public function useWeapon(){ echo 'Axe is my weapon'; } } class King extends Character { public function __construct(){ $this->WeaponBehavior = new KnifeBehavior(); } } $king = new King(); $king->fight(); echo 'now I am want to use axe!<br />'; $king->setWeapon(new AxeBehavior()); $king->fight();