RSS订阅 原创 完整电商项目--(三)验证码操作(2):短信验证码--补充 :单例模式

什么是单例模式

  • 我们节选一段网上的话:单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。
  • 举个例子,就像我们新定义一个类,去发送短信验证码。一个用户请求时会创建一个实例对象去处理。多个用户请求时,便会创建多个实例对象去处理。这大大的占用了内存空间,严重浪费内存资源。
  • 所以我们要做的,就是实现单例设计模式,我们希望在程序运行期间存在一个发送验证码类的实例对象

如何实现单例模式

  • 我们这里不重点去讲解单例模式。 因为实现方法很多,这是一个很重要的设计模式,内容分也很多。
  • **最常用的,也是最方便的方法就是 就是使用 new**方法来实现。
什么是__new__ 方法;
  • 让我们打开官方文档关于类定义,以及实例创建的部分
    在这里插入图片描述
    可以看到类‘加工制作’实例对象,首先通过 __new__方法创建实例对象,再调用 __init__方法进行 对实例的个性化,也就是初始化。
    在这里插入图片描述
    这就是__new__方法了。如果你详细解的了解其过程以及原理,强烈建议根据我的标记,重点阅读文档进行理解,兴趣足时,可以去阅览 底层Cpython源码。理解底层C的实现!
__new __方法实现单例模式的 原理。
  • 理解了__new__方法的作用,不难猜出,如何实现单例模式。 类的实例创建时,本身就是 首先通过这个方法创建的,然后再通过 __init__方法进行初始化的。
  • 所以: 我们只需要重写这个object的__new__方法,使其保持只有单个实例被创建就可以啦!简单方便。
hasatter方法
  • 正如下图所示,这个方法的作用就是 查看一个属性 是否属于一个对象。
  • 对于其底层调用的 getattr方法,不多介绍,是底层属性调用的时候,先调用getattribute方法,之后找不到报错,才回去调用 getattr,想仔细理解的,可以自己去阅读官方文档哈~
    在这里插入图片描述
  • hasatter
    在这里插入图片描述
正式设计发送短信验证码的类,单例模式。
  • 上代码:
class CCP(object):
    """发送短信的辅助类"""

    def __new__(cls, *args, **kwargs):
        # 判断是否存在类属性_instance,_instance是类CCP的唯一对象,即单例
        if not hasattr(CCP, "_instance"):
        	# 调用父类的(object)的__new__方法,创建实例对象 _instance
            cls._instance = super(CCP, cls).__new__(cls, *args, **kwargs)
            # 手动添加实例对象的属性,不通过调用__init__ 方法初始化实例对象
            # 和Demo一样,实例化REST类,然后将实例化的 REST对象当做 CPP实例对象的属性
            cls._instance.rest = REST(_serverIP, _serverPort, _softVersion)
            cls._instance.rest.setAccount(_accountSid, _accountToken)
            cls._instance.rest.setAppId(_appId)
        return cls._instance

    def send_template_sms(self, to, datas, temp_id):
        """发送模板短信"""
        # @param to 手机号码
        # @param datas 内容数据 格式为数组 例如:{'12','34'},如不需替换请填 ''
        # @param temp_id 模板Id
        result = self.rest.sendTemplateSMS(to, datas, temp_id)
        # 如果云通讯发送短信成功,返回的字典数据result中statuCode字段的值为"000000"
        if result.get("statusCode") == "000000":
            # 返回0 表示发送短信成功
            return 0
        else:
            # 返回-1 表示发送失败
            return -1

解释我已经在代码中写的很详细了~ ,大家有疑问欢迎交流!

over!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值