【工厂模式】短信工具类示例

【工厂模式】短信工具类示例

短信工具类结构图:

-factory
--lib
---Aliyun.php  // 阿里短信类
---Txyun.php  // 腾讯短信类
--demo.php  // 短信工具类测试入口
--ISms.php  // 短信基础接口
--SmsFactory.php  // 短信工厂
--XhSms.php  // 短信调用入口

文件内容示例:

1)Aliyun.php   阿里云短信类

/**
 * 阿里云短信类
 * @author wangdb
 */
class Aliyun implements ISms{
    public function sendSms(){
        echo 'Aliyun SendSms<br>';
    }
}

2)Txyun.php  腾讯短信类

/**
 * 腾讯短信类
 * @author wangdb
 */
class Txyun implements ISms{
    public function sendSms(){
        echo 'Txyun SendSms<br>';
    }
}

3)ISms.php  短信基础接口

/**
 * 短信接口
 * @author wangdb
 */
interface ISms{
    function sendSms();
}

4)SmsFactory.php  短信工厂

/**
 * 短信工厂
 * @author wangdb
 */
include './ISms.php';
include './lib/Aliyun.php';
include './lib/Txyun.php';
class SmsFactory{
    // 生成短信对象
    public static function createSms($func){
        return new $func();
    }
}

5)XhSms.php  短信调用入口文件

/**
 * 工厂模式之短信入口
 * @author wangdb
 */
include './SmsFactory.php';
class XhSms{
    CONST   ALIYUN     = 'Aliyun' // 阿里云短信
    CONST   TXYUN      = 'Txyun' // 腾讯云短信
    private static $_instance;  // 单例
    /**
     * 单例模式
     * @return XhSms
     */
    public static function gi(){
        if (!self::$_instance instanceof static) {
            self::$_instance = new static();
        }
        return self::$_instance;
    }
    /**
     * 单条短信发送
     */
    public static function sendSms($params, $plat = self::ALIYUN){
        if(!in_array($plat,array(self::ALIYUN, self::TXYUN))){
            return '参数错误';
        }
        echo '单条短信发送【调用多条短信】<br>';
        self::sendMultiSms($params, $plat);  // 单条短信调用多条短信
    }
    /**
     * 多条短信发送
     */
    public static function sendMultiSms($params, $plat = self::ALIYUN){
        if(!in_array($plat,array(self::ALIYUN, self::TXYUN))){
            return '参数错误';
        }
        echo '多条短信发送<br>';
        $YunSms = SmsFactory::createSms( $plat );
        $YunSms->sendSms($params);
    }
}

6)demo.php  短信测试文件

/**
 * 工厂模式测试Demo
 * @author wangdb
 */
include './XhSms.php';
$params = array();
$res = XhSms::gi()->sendSms($params, XhSms::ALIYUN);

访问Demo结果示意图:

单条短信发送【调用多条短信】
多条短信发送
Aliyun SendSms

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据