PHP 디자인 모델 의 외관 모델 Facade

목적.
Facade 는 여러 개의(물론,때로는 하나)인 터 페 이 스 를 삽입 하여 방문객 과 서브 시스템 을 결합 시 키 는 동시에 복잡 도 를 낮 추기 위해 서 입 니 다.
4.567917.Facade 는 서브 시스템 에 접근 하 는 것 을 금지 하지 않 습 니 다.4.567918.
  • 당신 은 하나의 서브 시스템 에 여러 개의 Facade 를 제공 할 수 있 습 니 다
  • 그래서 좋 은 Facade 에는 new 가 없 을 것 이다.모든 방법 에서 여러 개의 대상 을 구성 해 야 한다 면 그것 은 Facade 가 아니 라 생 성기 또는[추상|정태|간단]공장[방법]이다.
    우수한 Facade 는 new 가 없고 구조 함수 인 자 는 인터페이스 유형 입 니 다.새로운 인 스 턴 스 를 만 들 필요 가 있다 면,매개 변수 에 공장 대상 을 입력 하 십시오.
    UML

    코드
    Facade.php
    
    <?php
    
    namespace DesignPatterns\Structural\Facade;
    
    class Facade
    {
        /**
        * @var OsInterface
        *           。
        */
        private $os;
    
        /**
        * @var BiosInterface
        *               。
        */
        private $bios;
    
        /**
        * @param BiosInterface $bios
        * @param OsInterface $os
        *                $bios 。
        *            $os 。
        */
        public function __construct(BiosInterface $bios, OsInterface $os)
        {
            $this->bios = $bios;
            $this->os = $os;
        }
    
        /**
        *                 。
        */
        public function turnOn()
        {
            $this->bios->execute();
            $this->bios->waitForKeyPress();
            $this->bios->launch($this->os);
        }
    
        /**
        *         。
        */
        public function turnOff()
        {
            $this->os->halt();
            $this->bios->powerDown();
        }
    }
    OsInterface.php
    
    <?php
    
    namespace DesignPatterns\Structural\Facade;
    
    /**
    *           OsInterface 。
    */
    interface OsInterface
    {
        /**
        *       。
        */
        public function halt();
    
        /** 
        *         ,         。
        */
        public function getName(): string;
    }
    BiosInterface.php
    
    <?php
    
    namespace DesignPatterns\Structural\Facade;
    
    /**
    *               BiosInterface 。
    */
    interface  BiosInterface
    {
        /**
        *       。
        */
        public function execute();
    
        /**
        *           
        */
        public function waitForKeyPress();
    
        /**
        *       。
        */
        public function launch(OsInterface $os);
    
        /**
        *       。
        */
        public function powerDown();
    }
    테스트
    Tests/FacadeTest.php
    
    <?php
    
    namespace DesignPatterns\Structural\Facade\Tests;
    
    use DesignPatterns\Structural\Facade\Facade;
    use DesignPatterns\Structural\Facade\OsInterface;
    use PHPUnit\Framework\TestCase;
    
    /**
    *           FacadeTest 。
    */
    class FacadeTest extends TestCase
    {
        public function testComputerOn()
        {
            /** @var OsInterface|\PHPUnit_Framework_MockObject_MockObject $os */
            $os = $this->createMock('DesignPatterns\Structural\Facade\OsInterface');
    
            $os->method('getName')
                ->will($this->returnValue('Linux'));
    
            $bios = $this->getMockBuilder('DesignPatterns\Structural\Facade\BiosInterface')
                ->setMethods(['launch', 'execute', 'waitForKeyPress'])
                ->disableAutoload()
                ->getMock();
    
            $bios->expects($this->once())
                ->method('launch')
                ->with($os);
    
            $facade = new Facade($bios, $os);
    
            //        。
            $facade->turnOn();
    
            //            。
            $this->assertEquals('Linux', $os->getName());
        }
    }
    이상 은 PHP 디자인 모델 의 외관 모델 Facade 에 대한 상세 한 내용 입 니 다.더 많은 PHP 디자인 모델 의 외관 모델 Facade 에 관 한 자 료 는 우리 의 다른 관련 글 을 주목 하 세 요!

    좋은 웹페이지 즐겨찾기