工程模式

一.理解工厂模式
简单理解:工厂模式依然是一种创建型设计模式,作为工厂,它所关心的是产品的产生,也就是对象的创建,我们利用工厂来创建对象,而不必我们亲自创建对象,我们无需去理解如何创建对象,只需要向工厂提出要求,让工厂去根据你的要求,给你生产你要的产品,给你相应的对象,这种模式便叫做工厂模式。

工厂模式优点:

松耦合,对象的创建独立于类的实现

客户端无需了解创建对象的类,只需知道需要传递的接口,方法和参数就能够创建所需要的对象

很容易扩展工厂添加其他类型对象的创建,而使用者只需要改变参数就可以了

二.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

 

posted @ 2022-06-05 22:07  小白duzw  阅读(154)  评论(0)    收藏  举报