zoukankan      html  css  js  c++  java
  • Python之路第八天,进阶-设计模式

    设计模式

    单例模式

    单例,顾名思义单个实例。

    学习单例之前,首先来回顾下面向对象的内容:

    python的面向对象由两个非常重要的两个“东西”组成:类、实例

    面向对象场景一:

    如:创建三个游戏人物,分别是:

    • 盖伦,男,18,初始战斗力1000
    • 剑圣,男,20,初始战斗力1800
    • 凯特琳,女,19,初始战斗力2500
    # 定义类
    class Person:
    
        def __init__(self, name, sex, age, fight):
            self.name = name
            self.gender = sex
            self.age = age
            self.fight =fight
    
        def grassland(self):
            """注释:草丛战斗,消耗200战斗力"""
    
            self.fight = self.fight - 200
    
    #创建实例
    
    garen = Person('盖伦', '男', 18, 1000)    # 创建盖伦角色
    yi = Person('剑圣', '男', 20, 1800)  # 创建剑圣角色
    caitlyn = Person('凯特琳', '女', 19, 2500)      # 创建凯特林角色
    

    面向对象场景二:

    如:创建对数据库操作的公共类

    # #### 定义类 ####
    
    class DbHelper(object):
    
        def __init__(self):
            self.hostname = '1.1.1.1'
            self.port = 3306
            self.password = 'pwd'
            self.username = 'root'
    
        def fetch(self):
            # 连接数据库
            # 拼接sql语句
            # 操作
            pass
    
        def create(self):
            # 连接数据库
            # 拼接sql语句
            # 操作
            pass
    
        def remove(self):
            # 连接数据库
            # 拼接sql语句
            # 操作
            pass
    
        def modify(self):
            # 连接数据库
            # 拼接sql语句
            # 操作
            pass
    
    # #### 操作类 ####
    
    db = DbHelper()
    db.create()
    

    对于上述实例,每个请求到来,都需要在内存里创建一个实例,再通过该实例执行指定的方法。

    那么问题来了...如果并发量大的话,内存里就会存在非常多功能上一模一样的对象。存在这些对象肯定会消耗内存,对于这些功能相同的对象可以在内存中仅创建一个,需要时都去调用,也是极好的!!!

    单例模式出马,单例模式用来保证内存中仅存在一个实例!!!

    # ########### 单例类定义 ###########
    class Foo(object):
     
        __instance = None
     
        @staticmethod
        def singleton():
            if Foo.__instance:
                return Foo.__instance
            else:
                Foo.__instance = Foo()
                return Foo.__instance
     
    # ########### 获取实例 ###########
    obj = Foo.singleton()
    

    对于Python单例模式,创建对象时不能再直接使用:obj = Foo(),而应该调用特殊的方法:obj = Foo.singleton() 。

  • 相关阅读:
    Zabbix-Agent在主动模式启动服务后,提示no active checks on server [139.219.xx.xx:10051]: host [139.219.xx.xx] not found
    Linux中Sed的用法
    服务器监控软件有哪些?
    Linux和Windows中查看端口占用情况
    Window10中创建目录连接点
    C#中使用RabbitMQ收发队列消息
    ExtJs4.2中Tab选项卡的右击关闭其它和关闭当前功能不准确的解决方法
    Redis中取得所有Key、过期时间配置与获取、Key过期通知。
    使用Phantomjs和ChromeDriver添加Cookies的方法
    FasterRcnn训练数据集参数配置
  • 原文地址:https://www.cnblogs.com/zhangxunan/p/5633139.html
Copyright © 2011-2022 走看看