工厂模式(工厂方法模式)是我们程序设计中比较经常使用的一种模式,为什么叫工厂模式,因为它的核心思想就是像工厂生产一样,我们只需要往工厂中输入原材料而不用管工厂是如何生产的,最终得到我们想要的产品,例如一个榨汁机,我们放入一个橙子榨出来的是一杯橙汁,放入一个苹果榨出来的就是一杯苹果汁。在程序设计中就类似于下面的代码。
可能在没有学设计模式的时候我们就用过这种方法,但是我们却不知道这其实就是简单工厂方法模式,当参数为photo
的时候就调用input_photo()
的方法,当输入参数为video
的时候就调用input_video()
的方法,然后返回不同的值,这就是最简单的工厂模式了,但是如果输入变得很多,十几个甚至更多,那么需要对每一个输入进行判断就需要一个if
判断语句,程序看起来不美观,而且频繁地使用if else
耗费大量的系统资源,降低了程序的性能,这并不是我们想要的结果。
def input_photo():
print('play photo')
return 'photo'
def input_video():
print('play video')
return 'video'
def inputProcess(input):
output = None
if input == 'photo':
output = input_photo()
elif input == 'video':
output == input_video()
else:
return None
return output
a = inputProcess('photo')
print(a)
b = inputProcess('video')
print(b)
列表和字典是Python的核心杀手锏,精通列表和字典的使用能省去很多代码,优化代码结构,拿上面的程序来讲,我们可以利用字典设计得更加精简一些,利用字典的get()
方法不管输入类型有多少种,我们只需要判断一次就ok了,代码量减少了不少而且效率还提高了。
def input_photo():
print('play photo')
return 'photo'
def input_video():
print('play video')
return 'video'
INPUT_TYPE={'INPUT_PHOTO':input_photo, 'INPUT_VIDEO':input_video}
def inputProcess(input):
output = None
if INPUT_TYPE.get(input) is not None:
output = INPUT_TYPE.get(input)()
return output
a = inputProcess('INPUT_PHOTO')
print(a)
b = inputProcess('INPUT_VIDEO')
print(b)
值得注意的是Python
字典可以存储类和方法变量,在上面的代码output = INPUT_TYPE.get(input)()
中output
接收到的其实是一个程序执行完后返回的信息,将output = INPUT_TYPE.get(input)()
改成output = INPUT_TYPE.get(input)
程序返回的是一个函数的地址,这样我们就可以接收一个没有运行过的函数,类似于映射,在需要使用的时候再执行这个函数。
def input_photo():
print('play photo')
return 'photo'
def input_video():
print('play video')
return 'video'
INPUT_TYPE={'INPUT_PHOTO':input_photo, 'INPUT_VIDEO':input_video}
def inputProcess(input):
output = None
if INPUT_TYPE.get(input) is not None:
output = INPUT_TYPE.get(input)
return output
a = inputProcess('INPUT_PHOTO')
A = a()
print(A)
b = inputProcess('INPUT_VIDEO')
B = b()
print(B)
来源:CSDN
作者:只想整天学习
链接:https://blog.csdn.net/zZzZzZ__/article/details/104730997