我想使用Amazon SNS在我的应用程序中发送短信。我唯一担心的是,如果我决定将Amazon SNS换成其他提供商,会发生什么?
我已经提出了以下解决方案,但我不确定这是最佳做法还是将来会产生任何影响。
<?php
interface SMS {
public function sendSMS($from, $to);
}
abstract class AmazonSNS {
public function sendSMS($from, $to) {
echo 'Message sent';
}
}
class Notification extends AmazonSNS implements SMS {
}
$notification = new Notification;
$notification->sendSMS('xxxx', 'xxxx');
我的思维过程是我的应用程序只关心通知类,该类将强制我使用的任何抽象类(服务提供者)来实现这些方法接口所需的(我也可以使用电子邮件界面)。使用抽象类也会阻止它直接实例化,这将是不希望的行为。
答案 0 :(得分:1)
对我而言,最好使用
<?php
interface Notification {
public function notify($from, $to);
}
class AmazonSNSSmsNotification implements Notification {
public function notify($from, $to) {
//send notification using SMS
}
}
class OtherProviderSmsNotification implements Notification {
public function notify($from, $to) {
//send notification using SMS from other provider
}
}
class EmailNotification implements Notification {
public function notify($from, $to) {
//send notification using email
}
}
然后你可以轻松交换实现
function sendNotification(Notification $notifObj, $from, $to) {
$notifObj.notify($from, $to);
}
sendNotification(new AmazonSNSSmsNotification(), $from, $to);
sendNotification(new OtherProviderSmsNotification(), $from, $to);