feat : Decorator basic
This commit is contained in:
@@ -4,13 +4,14 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\Controller\Test;
|
||||
|
||||
use App\Controller\AbstractController;
|
||||
use App\Service\Test\Adapter\CacheService;
|
||||
use App\Service\Test\Adapter\PayService;
|
||||
use Hyperf\HttpServer\Annotation\Controller;
|
||||
use Hyperf\HttpServer\Annotation\RequestMapping;
|
||||
|
||||
#[Controller(prefix: 'adapter/test')]
|
||||
class AdapterTestController
|
||||
class AdapterTestController extends AbstractController
|
||||
{
|
||||
/**
|
||||
* pay 适配器
|
||||
|
||||
42
app/Controller/Test/DecoratorController.php
Normal file
42
app/Controller/Test/DecoratorController.php
Normal file
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Controller\Test;
|
||||
|
||||
use App\Controller\AbstractController;
|
||||
use App\Service\Test\Decorator\AopService;
|
||||
use App\Service\Test\Decorator\BasicService;
|
||||
use App\Service\Test\Decorator\ContainerService;
|
||||
use App\Service\Test\Decorator\HttpService;
|
||||
use Hyperf\HttpServer\Annotation\Controller;
|
||||
use Hyperf\HttpServer\Annotation\RequestMapping;
|
||||
|
||||
#[Controller(prefix: 'decorator/test')]
|
||||
class DecoratorController extends AbstractController
|
||||
{
|
||||
/**
|
||||
* basic 装饰器
|
||||
* @return array
|
||||
*/
|
||||
#[RequestMapping(path: 'basic', methods: 'GET')]
|
||||
public function basic()
|
||||
{
|
||||
return (new BasicService)->handle();
|
||||
}
|
||||
|
||||
public function container()
|
||||
{
|
||||
return (new ContainerService)->handle();
|
||||
}
|
||||
|
||||
public function aop()
|
||||
{
|
||||
return (new AopService)->handle();
|
||||
}
|
||||
|
||||
public function http()
|
||||
{
|
||||
return (new HttpService)->handle();
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace App\Interface\Test\Adapter;
|
||||
|
||||
interface PaymentGateway
|
||||
interface PaymentGatewayInterface
|
||||
{
|
||||
public function pay(float $amount): array;
|
||||
}
|
||||
12
app/Interface/Test/Decorator/ComponentInterface.php
Normal file
12
app/Interface/Test/Decorator/ComponentInterface.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace App\Interface\Test\Decorator;
|
||||
|
||||
interface ComponentInterface
|
||||
{
|
||||
/**
|
||||
* 组件接口
|
||||
* @return string
|
||||
*/
|
||||
public function operation(): string;
|
||||
}
|
||||
@@ -11,9 +11,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\Service\Test\Adapter\Pay;
|
||||
|
||||
use App\Interface\Test\Adapter\PaymentGateway;
|
||||
use App\Interface\Test\Adapter\PaymentGatewayInterface;
|
||||
|
||||
class AlipayAdapter implements PaymentGateway
|
||||
class AlipayAdapter implements PaymentGatewayInterface
|
||||
{
|
||||
/**
|
||||
* @var AlipayService
|
||||
|
||||
@@ -11,9 +11,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\Service\Test\Adapter\Pay;
|
||||
|
||||
use App\Interface\Test\Adapter\PaymentGateway;
|
||||
use App\Interface\Test\Adapter\PaymentGatewayInterface;
|
||||
|
||||
class WechatPayAdapter implements PaymentGateway
|
||||
class WechatPayAdapter implements PaymentGatewayInterface
|
||||
{
|
||||
/**
|
||||
* @var WechatPayService
|
||||
|
||||
@@ -9,13 +9,13 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Service\Test;
|
||||
namespace App\Service\Test\Decorator;
|
||||
|
||||
use App\Service\BaseService;
|
||||
use App\Service\Test\TestBaseService;
|
||||
|
||||
class AdapterTestService extends TestBaseService
|
||||
class AopService extends TestBaseService
|
||||
{
|
||||
public function handle(): array
|
||||
public function handle()
|
||||
{
|
||||
return $this->return->success();
|
||||
}
|
||||
40
app/Service/Test/Decorator/Basic/BasicDecorator.php
Normal file
40
app/Service/Test/Decorator/Basic/BasicDecorator.php
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* This service file is part of item.
|
||||
*
|
||||
* @author ctexthuang
|
||||
* @contact ctexthuang@qq.com
|
||||
* @web_site https://ctexthuang.com
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Service\Test\Decorator\Basic;
|
||||
|
||||
use App\Interface\Test\Decorator\ComponentInterface;
|
||||
|
||||
abstract class BasicDecorator implements ComponentInterface
|
||||
{
|
||||
/**
|
||||
* @var ComponentInterface $component
|
||||
*/
|
||||
protected ComponentInterface $component;
|
||||
|
||||
/**
|
||||
* 构造函数
|
||||
* @param ComponentInterface $component
|
||||
*/
|
||||
public function __construct(ComponentInterface $component)
|
||||
{
|
||||
$this->component = $component;
|
||||
}
|
||||
|
||||
/**
|
||||
* 装饰器基类
|
||||
* @return string
|
||||
*/
|
||||
public function operation(): string
|
||||
{
|
||||
return $this->component->operation();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* This service file is part of item.
|
||||
*
|
||||
* @author ctexthuang
|
||||
* @contact ctexthuang@qq.com
|
||||
* @web_site https://ctexthuang.com
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Service\Test\Decorator\Basic;
|
||||
|
||||
use App\Interface\Test\Decorator\ComponentInterface;
|
||||
|
||||
class ConcreteComponentService implements ComponentInterface
|
||||
{
|
||||
/**
|
||||
* 组件
|
||||
* @return string
|
||||
*/
|
||||
public function operation(): string
|
||||
{
|
||||
return 'ConcreteComponentService';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
/**
|
||||
* This service file is part of item.
|
||||
*
|
||||
* @author ctexthuang
|
||||
* @contact ctexthuang@qq.com
|
||||
* @web_site https://ctexthuang.com
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Service\Test\Decorator\Basic;
|
||||
|
||||
class ConcreteDecoratorAService extends BasicDecorator
|
||||
{
|
||||
/**
|
||||
* A 类装饰器组件逻辑
|
||||
* @return string
|
||||
*/
|
||||
public function operation(): string
|
||||
{
|
||||
return 'ConcreteDecoratorAService(' . parent::operation() . ')';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
/**
|
||||
* This service file is part of item.
|
||||
*
|
||||
* @author ctexthuang
|
||||
* @contact ctexthuang@qq.com
|
||||
* @web_site https://ctexthuang.com
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Service\Test\Decorator\Basic;
|
||||
|
||||
class ConcreteDecoratorBService extends BasicDecorator
|
||||
{
|
||||
/**
|
||||
* B 类装饰器组件逻辑
|
||||
* @return string
|
||||
*/
|
||||
public function operation(): string
|
||||
{
|
||||
return 'ConcreteDecoratorBService(' . parent::operation() . ')';
|
||||
}
|
||||
}
|
||||
36
app/Service/Test/Decorator/BasicService.php
Normal file
36
app/Service/Test/Decorator/BasicService.php
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
/**
|
||||
* This service file is part of item.
|
||||
*
|
||||
* @author ctexthuang
|
||||
* @contact ctexthuang@qq.com
|
||||
* @web_site https://ctexthuang.com
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Service\Test\Decorator;
|
||||
|
||||
use App\Service\Test\Decorator\Basic\ConcreteComponentService;
|
||||
use App\Service\Test\Decorator\Basic\ConcreteDecoratorAService;
|
||||
use App\Service\Test\Decorator\Basic\ConcreteDecoratorBService;
|
||||
use App\Service\Test\TestBaseService;
|
||||
|
||||
class BasicService extends TestBaseService
|
||||
{
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function handle(): array
|
||||
{
|
||||
$simple = new ConcreteComponentService();
|
||||
$decorator1 = new ConcreteDecoratorAService($simple);
|
||||
$decorator2 = new ConcreteDecoratorBService($decorator1);
|
||||
|
||||
return $this->return->success('success',[
|
||||
'simple' => $simple->operation(),
|
||||
'decorator1' => $decorator1->operation(),
|
||||
'decorator2' => $decorator2->operation()
|
||||
]);
|
||||
}
|
||||
}
|
||||
22
app/Service/Test/Decorator/ContainerService.php
Normal file
22
app/Service/Test/Decorator/ContainerService.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
/**
|
||||
* This service file is part of item.
|
||||
*
|
||||
* @author ctexthuang
|
||||
* @contact ctexthuang@qq.com
|
||||
* @web_site https://ctexthuang.com
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Service\Test\Decorator;
|
||||
|
||||
use App\Service\Test\TestBaseService;
|
||||
|
||||
class ContainerService extends TestBaseService
|
||||
{
|
||||
public function handle()
|
||||
{
|
||||
return $this->return->success();
|
||||
}
|
||||
}
|
||||
22
app/Service/Test/Decorator/HttpService.php
Normal file
22
app/Service/Test/Decorator/HttpService.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
/**
|
||||
* This service file is part of item.
|
||||
*
|
||||
* @author ctexthuang
|
||||
* @contact ctexthuang@qq.com
|
||||
* @web_site https://ctexthuang.com
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Service\Test\Decorator;
|
||||
|
||||
use App\Service\Test\TestBaseService;
|
||||
|
||||
class HttpService extends TestBaseService
|
||||
{
|
||||
public function handle()
|
||||
{
|
||||
return $this->return->success();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user