当前位置: 首页 > news >正文

python中的设计模式:单例模式、工厂模式

目录

一.设计模式

二.单例模式

二.工厂模式

优点:

总结


 

一.设计模式

设计模式是一种编程套路,可以极大的方便程序的开发。
最常见、最经典的设计模式,就是我们所学习的面向对象了。
除了面向对象外,在编程中也有很多既定的套路可以方便开发,我们称之为设计模式:

  • 单例、工厂模式
  • 建造者、责任链、状态、备忘录、解释器、访问者、观察者、中介.模板、代理模式
  • 等等模式

二.单例模式

class tool:
    pass

t1=tool()
t2=tool()
print(t1)
print(t2)

创建类的实例后,就可以得到一个完整的、独立的类对象。
通过print语句可以看出,它们的内存地址是不相同的,即t1和t2是完全独立的两个对象。

某些场景下,我们需要一个类无论获取多少次类对象,都仅仅提供一个具体的实例用以节省创建类对象的开销和内存开销

比如某些工具类,仅需要1个实例,即可在各处使用
这就是单例模式所要实现的效果。

单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。

  1. 定义:保证一个类只有一个实例,并提供一个访问它的全局访问点
  2. 适用场景:当一个类只能有一个实例,而客户可以从一个众所周知的访问点访问它时。

实现模式

 演示

from test import str_tool
t1=str_tool
t2=str_tool
print(t1)
print(t2)
print("----------")
print(id(t1))
print(id(t2))

 

二.工厂模式

当需要大量创建一个类的实例的时候,可以使用工厂模式。 

即,从原生的使用类的构造去创建对象的形式迁移到,基于工厂提供的方法去创建对象的形式。

以前我们用类创建对象时一般:

 用工厂模式就可以:
 

class Person:
    pass
class Worker(Person):
    def w1(self):
        print("worker1")
    def w2(self):
        print("worker2")
class Student(Person):
    def s1(self):
        print("student1")
    def s2(self):
        print("student2")
class Teacher(Person):
    def t1(self):
        print("teacher1")
    def t2(self):
        print("teacher2")
class Factory:
    def get_person(self,p_type):
        if p_type=='w':
            return Worker()
        elif p_type=='s':
            return Student()
        else:
            return Teacher()
factory=Factory()
worker=factory.get_person("w")
worker.w2()
print("---------")
stu=factory.get_person("s")
stu.s1()
print("---------")
tea=factory.get_person("t")
tea.t2()

结果是

 使用工厂类的get person()方法去创建具体的类对象

优点:

  1. 大批量创建对象的时候有统一的入口,易于代码维护
  2. 当发生修改,仅修改工厂类的创建方法即可
  3. 符合现实世界的模式,即由工厂来制作产品(对象)

总结

1.什么是设计模式
设计模式就是一种编程套路。
使用特定的套路得到特定的效果
2.什么是单例设计模式
单例模式就是对一个类,只获取其唯一的类实例对象,持续复用它.

  • 节省内存
  • 节省创建对象的开销

3.什么是工厂模式
将对象的创建由使用原生类本身创建转换到由特定的工厂方法来创建
4.好处

  • 大批量创建对象的时候有统一的入口,易于代码维护
  • 当发生修改,仅修改工厂类的创建方法即可
  • 符合现实世界的模式,即由工厂来制作产品(对象)

 

相关文章:

  • 连云港网站优化方案/如何注册网址
  • 做网站是哪个专业/中国万网域名注册服务内容
  • 3 建设营销型网站流程/东莞优化怎么做seo
  • 中国传统美食网页制作素材/aso优化排名违法吗
  • 辽宁建设工程信息网官网新网站如何进入/企业seo
  • 互联网服务平台单位机动车二维码/南昌做seo的公司有哪些
  • 程序员必知必会 QPS TPS、URI URL、PV UV GMV
  • CDH6.3生产环境中禁用Kerberos
  • EMQX 在 Kubernetes 中如何进行优雅升级
  • Java---中间件---Redis的常见命令和客户端使用
  • C/C++数据结构(十)—— 二叉查找树
  • 装修--避坑--马桶
  • Android 音视频——直播推流技术指南
  • 基于2D Object Detection的目标几何中心三维位置估计(C++)
  • 质心标准差和分散程度
  • JavaScript中 join()、split()、slice()函数的用法及区别
  • 【开发环境】JRE 裁剪 ① ( 裁剪 bin 目录下的 dll 动态库文件 )
  • TypeScript 数据模型层编程的最佳实践