标签:开始 create 生成 环境 根据 sel 调用 pre self
官方定义:在工厂设计模式中,客户端可以请求一个对象,而无需知道这个对象来自哪里,也就是使用哪个类来生成这个对象
大白话:我不用管这东西怎样来,我只知道有这东西,我就可以得到
通过模拟真实环境还原工厂模式,本案例模拟手机店买手机的情况
今年小王新开了一间手机店,他的经营模式是这样的:有人买手机---->手机店利用机器制造手机---->交付给顾客
然后有了接下来的经营情况:
1、普通模式
场景1:【小明】到手机店买苹果手机
【手机店】开始【调用苹果机器】制造苹果
手机店售卖这苹果手机给小明
场景2:【小东】到手机店买华为手机
【手机店】开始【调用机器】制造华为手机
手机店售卖这华为给小东
代码实现:
#-------------手机店------------------------- class PhoneStore(object):
#根据客户需求调用机器生产手机 def shellPhone(self,phone_type): if phone_type == "华为": return Hawei() elif phone_type == ‘苹果‘: return Iphone() elif phone_type == ‘oppo‘: return Oppo()
#--------------制造手机的机器-------------------- def Hawei(): print(‘生产华为手机‘) def Iphone(): print(‘生产苹果手机‘) def Oppo(): print(‘生产oppo手机‘)
#----------------买手机----------------------- if __name__ == ‘__main__‘: store = PhoneStore() store.shellPhone(‘苹果‘)
小王手机店按照这种模式经营,时间久了,发现这种模式不行,每一次来一个人买手机,手机店就要制造一台手机,非常的麻烦;
想着如果手机交给工厂制造,手机店只需要一个电话就可以拿到手机,
工厂模式:有人买手机---->手机店联系工厂---->工厂制造手机并交给手机店---->手机店交付顾客
接下来手机店使用工厂模式试营:
2、工厂模式
场景1:【小明】到手机店买苹果手机
【手机店】联系工厂生产苹果手机
【工厂】制造苹果手机并给手机店
手机店把手机交给小明
场景2:【小东】到手机店买华为手机
【手机店】联系工厂生产华为手机
【工厂】制造华为手机并给手机店
手机店把手机交给小东
代码实现:
#---------------手机店---------------------
class PhoneStore(object): def __init__(self): self.factory = PhoneFactory() def sellPhone(self,phone_type): return self.factory.createPhone(phone_type)
#------------------工厂制造手机---------------------- class PhoneFactory: def createPhone(self,phone_type): if phone_type == "华为": return Hawei() elif phone_type == ‘苹果‘: return Iphone() elif phone_type == ‘oppo‘: return Oppo()
#------------------机器--------------------------- def Hawei(): print(‘工厂生产华为手机‘) return ‘华为手机‘ def Iphone(): print(‘工厂生产苹果手机‘) return ‘苹果手机‘ def Oppo(): print(‘工厂生产oppo手机‘) return ‘oppo手机‘
#-------------------买手机----------------------------- if __name__ == ‘__main__‘: store = PhoneStore() phone = store.sellPhone(‘苹果‘) print(‘小明拿到的手机:%s‘ %phone)
小王按照工厂模式经营一点时间,发现了这个模式有个好处就是,
当顾客购买手机,手机店可以不用管手机是怎样制造,只要联系厂家和交付就可以,一个字爽,感觉就是在做一个中间商,赚差价
标签:开始 create 生成 环境 根据 sel 调用 pre self
原文地址:https://www.cnblogs.com/tang-s/p/10836979.html