헤드 퍼스트 전략 모드

WBOY
풀어 주다: 2016-08-08 09:30:50
원래의
1204명이 탐색했습니다.

전략 패턴, 즉 전략 패턴은 알고리즘 계열을 정의하고 서로 교체할 수 있도록 별도로 캡슐화합니다. 이 패턴은 알고리즘을 사용하는 고객과 독립적으로 알고리즘 변경을 수행합니다.

오리를 사용하여 전략 패턴을 설명하겠습니다. 오리는 꽥꽥거리는 것과 나는 것의 두 가지 행동을 가지고 있습니다. 그러나 모든 오리가 꽥꽥거리고 날 수 있는 것은 아니므로 변화를 주는 이 두 가지 행동을 추출합니다.

<?php
abstract class Duck{
    public $flyBehavior;
    public $quackBehavior;    

    public function __construct(){
    }

    public function performFly(){
        $this->flyBehavior->fly();
    }

    public function performQuack(){
        $this->quackBehavior->quack();
    }

    public function setFlyBehavior(FlyBehavior $fb){
        $this->flyBehavior = $fb;
    }

    public function setQuackBehavior(QuackBehavior $qb){
        $this->quackBehavior = $qb;
    }

    public function swim(){

    }
    
    abstract function display();
}

interface FlyBehavior{
    public function fly();
}
class FlywithWings implements FlyBehavior{
    public function fly(){
        echo "i'm flying!\n";
    }
}
class FlyNoWay implements FlyBehavior{
    public function fly(){
        echo "i can't fly.\n";
    }
}
class FlyRocketPowered implements FlyBehavior{
    public function fly(){
        echo "i'm flying with a rocket!\n";
    }
}

interface QuackBehavior{
    public function quack();
}
class Quack implements QuackBehavior{
    public function quack(){
        echo "quack!\n";
    }
}
class MuteQuack implements QuackBehavior{
    public function quack(){
        echo "silence\n";
    }
}


class MallardDuck extends Duck{
    public function __construct(){
        $this->quackBehavior = new Quack();
        $this->flyBehavior = new FlyNoWay();
    }

    public function display(){
        echo "i'm a real mallar duck\n";
    }    
}

$duck = new MallardDuck;
$duck->performFly();
$duck->setFlyBehavior(new FlyRocketPowered);
$duck->performFly();
?>
로그인 후 복사

위의 코드를 보면 오리를 추상화한 것을 볼 수 있으며, 비행 동작과 꽥꽥거리는 운전은 인터페이스 형태로 되어 있으며, 위의 작성 방법을 사용하여 더 많은 조합을 사용하고 더 적은 상속을 사용한다는 것을 알 수 있습니다. 결합된 동작 객체가 올바른 인터페이스 표준을 충족하는 한, 알고리즘은 클래스로 캡슐화될 뿐만 아니라 "런타임에 동적으로 동작을 변경할" 수 있습니다.

위 내용은 Head First-Strategy 모델을 그 측면을 포함하여 소개한 내용으로, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿