单例模式和工厂模式

Posted 宝山方圆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式和工厂模式相关的知识,希望对你有一定的参考价值。


设计模式

    设计模式是面向对象语言特有的内容,是我们在面临某一类问题时候固定的做法。


最常用的设计模式:

  • 工厂模式

  • 单例模式


    工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程(new 关键字和具体的构造器)隐藏起来。用一个工厂方法来替代,对外提供的只是一个工厂方法,达到提高灵活性的目的。 工厂模式实现了创建者和调用者的分离,使用专门的工厂类将选择实现类、创建对象进行统一的管理和控制。

# 工厂模式
class CarFactory:
def create_car(self, brand):
if brand == '奔驰':
return Benz()
elif brand == '宝马':
return BMW()
elif brand == '比亚迪':
return BYD()
else:
return '未知品牌,无法创建'
class Benz:
pass
class
BMW:
pass
class
BYD:
pass
factory = CarFactory()
c1 = factory.create_car('奔驰')
c2 = factory.create_car('宝马')

print(c1)
print(c2)


    单例模式的核心作用是确保一个类只有一个实例,并且提供一个访问该实例的全局访问点。单例模式只生成一个实例对象,减少了对系统资源的开销。当一个对象的产生需要比较多的资源,比如读取配置文件、产生其他依赖对象时,可以产生一个“单例对象”,然后永久驻留内存中,从而极大的降低开销。

# 测试单例模式
class MySingleton:

__obj = None
   
__init_flag = True
   def
__new__(cls, *args, **kwargs):
if cls.__obj == None:
cls.__obj = object.__new__(cls)
return cls.__obj

def __init__(self, name):
if MySingleton.__init_flag:
print('init ......')
self.name = name
MySingleton.__init_flag = False
a = MySingleton('aa')
b = MySingleton('bb')
print(a)
print(b)


将工厂模式改成单例模式:

# 测试工厂模式和单例模式
class CarFactory:
__obj = None
   
__init_flag = True
   def
create_car(self, brand):
if brand == '奔驰':
return Benz()
elif brand == '宝马':
return BMW()
elif brand == '比亚迪':
return BYD()
else:
return '未知品牌,无法创建'
   
def __new__(cls, *args, **kwargs):
if cls.__obj == None:
cls.__obj = object.__new__(cls)

return cls.__obj

def __init__(self):
if CarFactory.__init_flag:
print('init CarFactory...')
CarFactory.__init_flag = False
class
Benz:
pass
class
BMW:
pass
class
BYD:
pass
factory = CarFactory()
c1 = factory.create_car('奔驰')
c2 = factory.create_car('比亚迪')
print(c1)
print(c2)

factory2 = CarFactory()
print(factory)
print(factory2)


    之前一直不怎么理解这两种设计模式,今天偶然看了一个视频,瞬间觉得能够理解这两种模式了,作为记录。


宁可一年不将军,不可一日不拱卒。


谢谢!


以上是关于单例模式和工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

单例模式和工厂方法模式

手写单例模式(饿汉和饱汉模式)和工厂模式

前端设计模式——单例模式和工厂模式

设计模式-创建型模式讲解(单例原型工厂方法抽象工厂建造者)

Java设计模式图文代码案例详解Java五大创建者模式 建造者原型(抽象)工厂单例模式

java:常用的两种设计模式(单例模式和工厂模式)