核心:
一、定义一个接口类里面写规定好的方法。
interface Message{ public function send(array $params); public function getMessage(array $params); public function getCode(array $params); }
二、定义产品类 、产品类继承接口类
class AlliYunSms implements Message{ public function send(array $params){ return '发送短信'; } public function getMessage(array $params){ return '短信内容'; } public function getCode(array $params){ return '短信验证码'; } } class QQSms implements Message{ public function send(array $params){ return '发送短信'; } public function getMessage(array $params){ return '短信内容'; } public function getCode(array $params){ return '短信验证码'; } } class BaiduSms implements Message{ public function send(array $params){ return '发送短信'; } public function getMessage(array $params){ return '短信内容'; } public function getCode(array $params){ return '短信验证码'; } }
三、编写工厂类实现业务
class SmsFactory{ public $service=[ 'aliyun' => AlliYunSms::class, 'qq' => QQSms::class, 'baidu' => BaiduSms::class ]; public $MsgService; public function __construct($type){ if(!isset($this->service[$type])){ throw new \Exception('短信服务不存在'); } $this->MsgService = $this->service[$type]; } public static function create(string $type){ $class = __NAMESPACE__.'\\'.$type.'Sms'; return new $class(); } public function send(array $params){ $this->MsgService->send($params); //业务逻辑 return '发送成功'; } } $service=new SmsFactory('aliyun'); $service->send(['name'=>'thinkphp'])
总结
大家有更好的写法请欢迎讨论