观察者模式2

实例:

default_sdk()->NotificationCenter()->notify(NotifyKeyRefundSuccess, array(
        "refund_sn" => $refund_data['refund_sn'],
        "uid" => $refundTask['user_id']
));
function default_sdk()
{
    global $sdk;
    if ($sdk == null) {
        $sdk = SDKCore::instance();
        $sdk->initGlobalData();
    }
    return $sdk;
}

class SDKCore{
     public static function instance()
    {
        if (self::$_instance === null)
            self::$_instance = new SDKCore();
        return self::$_instance;
    }
      public function _SmsService()
    {
        if (!self::$sms_service) {
            self::$sms_service = new SmsService();
        }
        return self::$sms_service;
    }
    public function _PushNotificationService()
    {
        if (!self::$push_service) {
            self::$push_service = new PushNotificationService();
        }
        return self::$push_service;
    }
      public function NotificationCenter()
    {
        if (!self::$notification_center) {
            self::$notification_center = new NotificationCenter();
            default_sdk()->_SmsService()->regObserver();//观察者注入
            default_sdk()->_PushNotificationService()->regObserver();//观察者注入
        }
        return self::$notification_center;
    }
}

class SmsService
{
    public function handleNotify($key, $data)
    {
        if ($key == NotifyKeyOrdersPay) {

        } else if ($key == NotifyKeyOrdersDelivery) {
            default_sdk()->OrderService()->send_sms_yunpian_write($data);
        } 
    }

    public function regObserver()
    {
        default_sdk()->NotificationCenter()->regObserver(NotifyKeyOrdersPay, $this);
        default_sdk()->NotificationCenter()->regObserver(NotifyKeyDelivery, $this);
    }
}

class PushNotificationService extends ServiceBase
{
      public function regObserver()
    {
        default_sdk()->NotificationCenter()->regObserver(NotifyRefundChanged, $this);
        default_sdk()->NotificationCenter()->regObserver(NotifyRefundSuccess, $this);
      }
      
      public function handleNotify($key, $data)
    {
        $Db = new DataSource;
        //退款消息
        if ($key == NotifyRefundInfoChanged) {
            if(date('G')>=23 || date('G')<8) return;
            $refundModel = $data;
            $user_id = $refundModel->userId;
            $redis_value = 1;
            $redis_sign = $Db->getRedisManager()->get_refund_sign_push_time($user_id);
            if($redis_sign == $redis_value) return;
            $Db->getRedisManager()->set_refund_sign_push_time($user_id,$redis_value);
            if (!($refundModel instanceof RefundModel))
                return;
            $pushType = isset($refundModel->pushType) ? $refundModel->pushType : 0;
            $this->pushToUser_StartWeb($refundModel->userId, "楚楚街", "您的退款有一条新消息,点击查看。",
                H5_SC_REFUND_DETAIL.'?refund_sn='. $refundModel->refundSn,$pushType);
            Monitor::reportCount(PUSH_REFUND_MESSAGE_COUNT);
        } else if ($key == NotifyKeyOrdersPay) {//付款成功
        }
}

class NotificationCenter
{
    private $observerDict = array();

    //$observer需要实现IObserver接口
    public function  regObserver($key, $observer)
    {
        $list = $this->observerDict[$key];
        if (!$list) {
            $list = array();
        }
        $list[] = $observer;
        $this->observerDict[$key] = $list;
    }

    public function notify($key, $data)
    {
        $list = $this->observerDict[$key];
        if ($list) {
            for ($i = 0; $i < count($list); $i++) {
                if($key == NotifyKeyOrderPayedPointReceive ||
                    $key == NotifyKeyNopayOrdersTimeout1day
                )
                {
                    try {
                        $list[$i]->handleNotify($key, $data);
                    } catch (Exception $ex) {

                    }
                }else{
                    CCTransactionIgnoreRollbackStart();
                    try {
                        $list[$i]->handleNotify($key, $data);
                    } catch (Exception $ex) {
                    }
                    CCTransactionIgnoreRollbackEnd();
                }   
            }
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容