工厂模式是一个在软件开发中用来创建对象的设计模式。
当程序运行输入一个“类型”的时候,需要创建于此相应的对象。这就用到了工厂模式。在如此情形中,实现代码基于工厂模式,可以达到可扩展,可维护的代码。当增加一个新的类型,不在需要修改已存在的类,只增加能够产生新类型的子类。
设计模式的“工厂”这个概念就是来源于我们现实中的工厂,我们把原材料、图纸等生产资料投入到一个工厂里面,工厂就会给我们输出相应的产品,所以实现工厂方法很简单,一个函数就是一个工厂。
class Car:
def run(self):
print("吧里吧里的跑")
def stop(self):
print("吧拉吧拉的停")
class BMW(Car):
def run(self):
print("宝马---->>驾驾驾。。。。")
def stop(self):
print("宝马---->>吁。。。。")
class Fute(Car):
def run(self):
print("福特---->>轮胎跑")
def stop(self):
print("福特---->>脚刹")
class Phoenix(Car):
def run(self):
print("凤凰---->>用脚蹬")
def stop(self):
print("凤凰---->>手刹")
class CarFactory:
"""工厂集中管理"""
def new_car(self,name):
if name=="BMW":
bmw = BMW()
return bmw
if name=="Phoenix":
phoenix = Phoenix()
return phoenix
if name=="Fute":
fute = Fute()
return fute
class CarStore:
"""4s店"""
def __init__(self,factory):
self.factory = factory
def order(self,name):
"""订单"""
new_car = self.factory.new_car(name)
return new_car
factory=CarFactory()
car_store = CarStore(factory)
fh = car_store.order("Phoenix")
fh.run()
fh.stop()
工厂模式的优点和应用
工厂模式、抽象工厂模式的优点:
1、工厂模式巨有非常好的封装性,代码结构清晰;在抽象工厂模式中,其结构还可以随着需要进行更深或者更浅的抽象层级调整,非常灵活;
2、屏蔽产品类,使产品的被使用业务场景和产品的功能细节可以分而开发进行,是比较典型的解耦框架。
工厂模式、抽象工厂模式的使用场景:
当系统实例要求比较灵活和可扩展时,可以考虑工厂模式或者抽象工厂模式实现。比如,在通信系统中,高层通信协议会很多样化,同时,上层协议依赖于下层协议,那么就可以对应建立对应层级的抽象工厂,根据不同的“产品需求”去生产定制的实例。
工厂类模式的不足
1、工厂模式相对于直接生成实例过程要复杂一些,所以,在小项目中,可以不使用工厂模式;
2、抽象工厂模式中,产品类的扩展比较麻烦。毕竟,每一个工厂对应每一类产品,产品扩展,就意味着相应的抽象工厂也要扩展。