<?php
declare(strict_types=1);
// php 技术群:781742505
// 多个 Formatters 抽象出 Formatter 接口
// 多个 Services 抽象出 Service 接口
// 两个接口之间有座桥,将两个接口的所有实例可以任意互联。
/**
* Interface Formatter
*/
interface Formatter
{
/**
* @param string $text
*
* @return string
*/
public function format(string $text): string;
}
/**
* Class Service
*
* @package DesignPatterns\Structural\Bridge
*/
abstract class Service
{
/**
* @var Formatter
*/
protected $implementation;
/**
* @param Formatter $printer
*/
public function __construct(Formatter $printer)
{
$this->implementation = $printer;
}
/**
* @param Formatter $printer
*/
public function setImplementation(Formatter $printer)
{
$this->implementation = $printer;
}
/**
* @return string
*/
abstract public function get(): string;
}
/**
* Class HtmlFormatter
*
* @package DesignPatterns\Structural\Bridge
*/
class HtmlFormatter implements Formatter
{
/**
* @param string $text
*
* @return string
*/
public function format(string $text): string
{
return sprintf('<p>%s</p>', $text);
}
}
/**
* Class PlainTextFormatter
*
* @package DesignPatterns\Structural\Bridge
*/
class PlainTextFormatter implements Formatter
{
/**
* @param string $text
*
* @return string
*/
public function format(string $text): string
{
return "$text";
}
}
/**
* Class PingService
*
* @package DesignPatterns\Structural\Bridge
*/
class PingService extends Service
{
/**
* @return string
*/
public function get(): string
{
return $this->implementation->format("pong");
}
}
/**
* Class HelloWorldService
*
* @package DesignPatterns\Structural\Bridge
*/
class HelloWorldService extends Service
{
/**
* @return string
*/
public function get(): string
{
return $this->implementation->format('Hello World');
}
}
echo (new HelloWorldService(new PlainTextFormatter()))->get();
echo (new HelloWorldService(new HtmlFormatter()))->get();
echo (new PingService(new PlainTextFormatter()))->get();
echo (new PingService(new HtmlFormatter()))->get();
桥模式
最新推荐文章于 2022-04-24 11:49:40 发布