设计模式之单例模式与工厂模式

设计模式

设计模式是一种编程套路, 可以极大的方便程序的开发

最常见, 最经典的设计模式, 就是面向对象

除了面向对象外, 在编程种也有很多既定的套路可以方便开发, 我们称之为设计模式:

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

单例模式

class Tool:
    pass

t1 = Tool()
t2 = Tool()
print(t1) # <__main__.Tool object at 0x000001F9303BB0E0>
print(t2) # <__main__.Tool object at 0x000001F9302DCB90>

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

某些场景下, 我们需要一个类无论获取多少次类对象, 都仅仅提供一个具体的实例, 用于节省创建类对象的开销和内存开销, 比如某些工具类, 仅需要 1 个实例, 即可在各处使用 , 这就是单例模式所要实现的效果

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

单例的实现模式:

# test.py 

class Tool:
    pass

str_tool = Tool()
# mian.py

from test import str_tool

s1 = str_tool
s2 = str_tool

print(s1) # <test.Tool object at 0x0000018CA977B0E0>
print(s2) # <test.Tool object at 0x0000018CA977B0E0>

s1 和 s2 就是同一个对象

工厂模式

当需要大量创建一个类的实例的时候, 可以使用工厂模式, 即, 从原生的使用类的构造去创建对象的形式 迁移到 基于工厂提供的方法去创建对象的形式

class Person:
    pass

class Worker(Person):
    pass
class Student(Person):
    pass
class Teacher(Person):
    pass

worker = Worker()
stu = Student()
teacher = Teacher()

以上代码是原生的使用类的构造去创建对象, 当需要构建的对象的数量非常多的时候,使用工厂模式会更加方便

class Person:
    pass

class Worker(Person):
    pass
class Student(Person):
    pass
class Teacher(Person):
    pass

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')
teacher = factory.get_person('t')
student = factory.get_person('s') 

工厂模式就是当我们需要构建对象的时候, 先构建一个工厂, 然后通过工厂的方法去构建对象

这样看来是不是显得多此一举?

其实使用工厂模式有一下好处:

  • 大批量创建对象的时候有统一的入口, 易于代码维护
  • 当发生修改,仅修改共厂类的创建方法即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值