23
loading...
This website collects cookies to deliver better user experience
<?php
class FollowPostSearcher
{
// Alguma lógica interna
public function findByInternalCode(string $code)
{
// Lógica de busca por código privado com FollowPost API
}
public function findByExternalCode(string $code)
{
// Lógica de busca por código público com FollowPost API
}
}
class TransportXPTOSearcher extends PostSearcher
{
public function findByExternalCode(string $code)
{
// Lógica de busca por código público com TransportXPTO API
}
}
class FlashDeliverySearcher extends PostSearcher
{
public function findByInternalCode(string $code)
{
// Lógica de busca por código privado com FlashDelivery API
}
public function findByExternalCode(string $code)
{
// Lógica de busca por código público com FlashDelivery API
}
}
class Search
{
private FollowPostSearcher $followPostSearcher;
public function __construct(FollowPostSearcher $followPostSearcher)
{
$this->followPostSearcher = $followPostSearcher;
}
public function searchInternal(string $code)
{
return $this->followPostSearcher->findByInternalCode($code);
}
public function searchExternal(string $code)
{
return $this->followPostSearcher->findByExternalCode($code);
}
}
Um subtipo pode ser substituído por outro subtipo.
<?php
interface InternalCodeSearcher
{
public function findByInternalCode(string $code);
}
interface ExternalCodeSearcher
{
public function findByExternalCode(string $code);
}
class FollowPostSearcher implements InternalCodeSearcher, ExternalCodeSearcher
{
// Alguma lógica interna
public function findByInternalCode(string $code)
{
// Lógica de busca por código privado com FollowPost API
}
public function findByExternalCode(string $code)
{
// Lógica de busca por código público com FollowPost API
}
}
class TransportXPTOSearcher implements InternalCodeSearcher
{
public function findByInternalCode(string $code)
{
// Lógica de busca por código privado com TransportXPTO API
}
}
class FleshDeliverySearcher implements InternalCodeSearcher, ExternalCodeSearcher
{
public function findByInternalCode(string $code)
{
// Lógica de busca por código privado com FlashDelivery API
}
public function findByExternalCode(string $code)
{
// Lógica de busca por código público com FlashDelivery API
}
}
class Search
{
public function searchInternal(InternalCodeSearcher $internalCodeSearcher, string $code)
{
return $internalCodeSearcher->findByInternalCode($code);
}
public function searchExternal(ExternalCodeSearcher $externalCodeSearcher, string $code)
{
return $externalCodeSearcher->findByExternalCode($code);
}
}
23