python设计模式(四):单例模式及创建型模式总结
单例,顾名思义是一个实例,即在一个项目之中,单例的类只实例化一次。它常常应用于数据库操作、日志函数。
在一个大型项目中使用到日志和数据库操作的地方很多,不能每个文件都去单独实例化一次,此时单例模式就显示出了他的价值。
单例的核心在类的内部方法__new__(),每次实例化都是通过执行new函数来返回实例对象。
单例就是在类里面定义一个作用域最高的标志性的属性,如果实例化过一次,那这个属性为True否则为False,那么返回上次实例化的对象。
code实例:
class Singleton(object):
def __new__(cls, *args, **kw):
if not hasattr(cls, '_instance'):
org = super(Singleton, cls)
cls._instance = org.__new__(cls, *args, **kw)
return cls._instance
# 复写内部方法__new__()
通过hasattr函数判断该类实例化时有没有_instance属性
如果不存在,那么继承并返回原始的__new__方法给_instance属性
如果存在则直接返回_instance属性所指的对象
到目前为止,已经阐述了设计模式中的创建型模式,分别是:工厂方法、抽象工厂方法、建造者、原型模式、单例模式,他们之所以属于创建型,在于他们控制或者影响一个实例化对象的创建过称。
工厂方法和抽象工厂控制实例对象时候的类选择,建造者模式控制多个类以相同的流程实例化、原型模式通过深度复制原型类让类的多个实例化更加的迅速,单例模式让类的实例化对象只存在一个。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
python设计模式(三):原型模式—快速实例化类的一种途径
原型是相对于复制、克隆而言,但是不同于模板,模板创造出的东西是一模一样,而原型创造的东西是允许差异化和个性化存在,这就是原型。 原型模式最为核心的两点是:拷贝、属性更新;拷贝指深拷贝copy.deepcopy,属性更新是类的自有属性__dict__的更新。 实例代码: #-*-coding:utf-8-*-importcopyclassInformation: """个人信息""" def__init__(self): self.name=None self.ager=None self.height=None defrun(self): """ 自我介绍方法 :return: """ print("我叫{}:年龄:{}身高:{}".format(self.name,self.ager,self.height))classPrototype: def__init__(self,obj): self.copy_object=obj() defclone(self,**attr): obj=copy.deepcopy(self.copy_object) obj.__dict__.updat...
- 下一篇
python设计模式(五):适配器模式——各种类接口的合并
适配器可以理解为万能接口,各种类可以通过这个接口然后被调用,达到万能转换的效果。 他的实现是以我们定义的适配器函数来分类,将各种类的不同方法注册到对应的分类函数中,调用的时候只需要使用分类名,这样就达到了适配所有类不同方法的效果. 示例code classA: defa(self): print("我是A类的a方法")classB: defb(self): print("我是B类的b方法")classC: defc(self): print("我是C类的c方法")classAdapter: def__init__(self,classname,method): self.classname=classname self.__dict__update=method def__getattr__(self,attr): returngetattr(self.classname,attr)deftest(): objects=[] AA=A() objects.append(Adapter(AA,dict(test=AA.a))) BB=B() objects.append(Adapter(...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- 设置Eclipse缩进为4个空格,增强代码规范
- Mario游戏-低调大师作品
- MySQL8.0.19开启GTID主从同步CentOS8
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Redis,开启缓存,提高访问速度