PHP設計模式之橋樑模式(Bridge)代碼實例大全(11)

目的

解耦一個對象使抽象與實現分離,這樣二者能夠獨立地變化。php

例子

★官方PHP高級學習交流社羣「點擊」管理整理了一些資料,BAT等一線大廠進階知識體系備好(相關學習資料以及筆面試題)以及不限於:分佈式架構、高可擴展、高性能、高併發、服務器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點高級進階乾貨laravel

代碼

  • Formatter.php
<?php

namespace DesignPatterns\Structural\Bridge;

/**
* 建立格式化接口。
*/
interface FormatterInterface
{
    public function format(string $text);
}
  • PlainTextFormatter.php
<?php

namespace DesignPatterns\Structural\Bridge;

/**
* 建立 PlainTextFormatter 文本格式類實現 FormatterInterface 接口。
*/
class PlainTextFormatter implements FormatterInterface
{

    /**
    * 返回字符串格式。
    */
    public function format(string $text)
    {
        return $text;
    }
}
  • HtmlFormatter.php
<?php

namespace DesignPatterns\Structural\Bridge;

/**
* 建立 HtmlFormatter HTML 格式類實現 FormatterInterface 接口。
*/
class HtmlFormatter implements FormatterInterface
{

    /**
    * 返回 HTML 格式。
    */
    public function format(string $text)
    {
        return sprintf('<p>%s</p>', $text);
    }
}
  • Service.php
<?php

namespace DesignPatterns\Structural\Bridge;

/**
* 建立抽象類 Service。
*/
abstract class Service
{
    /**
    * @var FormatterInterface
    * 定義實現屬性。
    */
    protected $implementation;

    /**
    * @param FormatterInterface $printer
    * 傳入 FormatterInterface 實現類對象。
    */
    public function __construct(FormatterInterface $printer)
    {
        $this->implementation = $printer;
    }

    /**
    * @param FormatterInterface $printer
    * 和構造方法的做用相同。
    */
    public function setImplementation(FormatterInterface $printer)
    {
        $this->implementation = $printer;
    }

    /**
    * 建立抽象方法 get() 。
    */
    abstract public function get();
}
  • HelloWorldService.php
<?php

namespace DesignPatterns\Structural\Bridge;

/**
* 建立 Service 子類 HelloWorldService 。
*/
class HelloWorldService extends Service
{

    /**
    * 定義抽象方法 get() 。
    * 根據傳入的格式類定義來格式化輸出 'Hello World' 。
    */
    public function get()
    {
        return $this->implementation->format('Hello World');
    }
}

測試

  • Tests/BridgeTest.php
<?php

namespace DesignPatterns\Structural\Bridge\Tests;

use DesignPatterns\Structural\Bridge\HelloWorldService;
use DesignPatterns\Structural\Bridge\HtmlFormatter;
use DesignPatterns\Structural\Bridge\PlainTextFormatter;
use PHPUnit\Framework\TestCase;

/**
* 建立自動化測試單元 BridgeTest 。
*/
class BridgeTest extends TestCase
{

    /**
    * 使用 HelloWorldService 分別測試文本格式實現類和 HTML 格式實
    * 現類。
    */
    public function testCanPrintUsingThePlainTextPrinter()
    {
        $service = new HelloWorldService(new PlainTextFormatter());
        $this->assertEquals('Hello World', $service->get());

        // 如今更改實現方法爲使用 HTML 格式器。
        $service->setImplementation(new HtmlFormatter());
        $this->assertEquals('<p>Hello World</p>', $service->get());
    }
}

PHP 互聯網架構師成長之路*「設計模式」終極指南面試

PHP 互聯網架構師 50K 成長指南+行業問題解決總綱(持續更新)sql

面試10家公司,收穫9個offer,2020年PHP 面試問題shell

★若是喜歡個人文章,想與更多資深開發者一塊兒交流學習的話,獲取更多大廠面試相關技術諮詢和指導,歡迎加入咱們的羣啊,暗號:phpzh(羣號碼856460874)。設計模式

2020年最新PHP進階教程,全系列!服務器

內容不錯的話但願你們支持鼓勵下點個贊/喜歡,歡迎一塊兒來交流;另外若是有什麼問題 建議 想看的內容能夠在評論提出架構

相關文章
相關標籤/搜索