一.理解工厂模式
简单理解:工厂模式依然是一种创建型设计模式,作为工厂,它所关心的是产品的产生,也就是对象的创建,我们利用工厂来创建对象,而不必我们亲自创建对象,我们无需去理解如何创建对象,只需要向工厂提出要求,让工厂去根据你的要求,给你生产你要的产品,给你相应的对象,这种模式便叫做工厂模式。
工厂模式优点:
松耦合,对象的创建独立于类的实现
客户端无需了解创建对象的类,只需知道需要传递的接口,方法和参数就能够创建所需要的对象
很容易扩展工厂添加其他类型对象的创建,而使用者只需要改变参数就可以了
二.python实现工厂模式
1.简单工厂模式
class Apple:
def eat(self):
print("eat apple")
class Banana:
def eat(self):
print("eat banana")
class FruitFactory:
def create_fruit(self, name):
if name == "apple":
return Apple()
elif name == "banana":
return Banana()
if __name__ == '__main__':
f = FruitFactory()
apple = f.create_fruit("apple")
banana = f.create_fruit("banana")
apple.eat()
banana.eat()
说明:首先创建苹果和香蕉两个类,包含eat方法,然后创建一个水果工厂类,有一个create_fruit方法,接收一个name参数,里面跟进name来判断最终生成什么对象实例。
但是这种方式有个缺点就是如果需要新增了很多种水果,那么就得修改create_fruit中的内容,增加判断条件。
2.工厂方法模式
import abc
class Apple:
def eat(self):
print("eat apple")
class Banana:
def eat(self):
print("eat banana")
class Pear:
def eat(self):
print("eat pear")
class Factory():
__meteclass__ = abc.ABCMeta
@abc.abstractmethod
def create_fruit(self):
pass
class AppleFactory(Factory):
def create_fruit(self):
return Apple()
class BananaFactory(Factory):
def create_fruit(self):
return Banana()
class PearFactory(Factory):
def create_fruit(self):
return Pear()
if __name__ == '__main__':
apple = AppleFactory().create_fruit()
banana = BananaFactory().create_fruit()
pear = PearFactory().create_fruit()
apple.eat()
banana.eat()
pear.eat()
说明:这个模式中如果有新水果出现的话,只需要再写一个子类继承工厂抽象类,然后调用子类来获取对应实例。
这种模式相当于在原来的水果类上套了一层壳,个人觉得这种方式优点不明显,或者是自己没有参透。唯一想到的是如果水果名字需要修改,只需要修改两处即可(水果名和对应水果的工厂方法中的return中的类名)。
3.抽象工厂模式
如果有新的需求,想要生产黄色和绿色的水果
import abc
class GreenApple:
def eat(self):
print("eat green_apple")
class YellowApple:
def eat(self):
print("eat yellow_apple")
class GreenBanana:
def eat(self):
print("eat green_banana")
class YellowBanana:
def eat(self):
print("eat yellow_banana")
class Factory():
__meteclass__ = abc.ABCMeta
@abc.abstractmethod
def create_green_fruit(self):
pass
@abc.abstractmethod
def create_yellow_fruit(self):
pass
class AppleFactory(Factory):
def create_green_fruit(self):
return GreenApple()
def create_yellow_fruit(self):
return YellowApple()
class BananaFactory(Factory):
def create_green_fruit(self):
return GreenBanana()
def create_yellow_fruit(self):
return YellowBanana()
if __name__ == '__main__':
apple = AppleFactory().create_green_fruit()
banana = BananaFactory().create_yellow_fruit()
apple.eat()
banana.eat()
————————————————
版权声明:本文为CSDN博主「pinou921」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011564779/article/details/107895357