美文网首页
PHP设计模式之 桥梁模式(Bridge)代码实例大全(11)

PHP设计模式之 桥梁模式(Bridge)代码实例大全(11)

作者: 八重樱勿忘 | 来源:发表于2020-09-14 21:48 被阅读0次

    目的

    解耦一个对象使抽象与实现分离,这样两者可以独立地变化。

    例子

    ★官方PHP高级学习交流社群「点击」管理整理了一些资料,BAT等一线大厂进阶知识体系备好(相关学习资料以及笔面试题)以及不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货

    代码

    • 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 成长指南+行业问题解决总纲(持续更新)

    面试10家公司,收获9个offer,2020年PHP 面试问题

    ★如果喜欢我的文章,想与更多资深开发者一起交流学习的话,获取更多大厂面试相关技术咨询和指导,欢迎加入我们的群啊,暗号:phpzh(群号码856460874)。

    2020年最新PHP进阶教程,全系列!

    内容不错的话希望大家支持鼓励下点个赞/喜欢,欢迎一起来交流;另外如果有什么问题 建议 想看的内容可以在评论提出

    相关文章

      网友评论

          本文标题:PHP设计模式之 桥梁模式(Bridge)代码实例大全(11)

          本文链接:https://www.haomeiwen.com/subject/xmutyktx.html