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.好处

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

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳862

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值