鱼C论坛

 找回密码
 立即注册
查看: 870|回复: 11

[已解决]工程函数与工程模式理解上的区别??

[复制链接]
发表于 2024-2-1 11:26:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
书中提到了工厂函数,其实就是一个类对象,通过调用这个工厂函数来创建对应的对象,而非用类来构造对象。
而工厂模式是一种设计模式,通过该模式【包括很多类的封装】的调用来构造不同的对象。
请问论坛各位大佬,我的这个理解对否??求指导!
最佳答案
2024-2-1 11:27:34
你的理解基本上是正确的。

工厂函数是一种简单的方式,它是一个函数,用于创建并返回对象实例。工厂函数通过调用函数名来创建对象。这种方法适用于只需要创建一个对象的情况。

而工厂模式是一种设计模式,它是一种创建对象的方式,可以根据需求创建不同类型的对象。工厂模式包括多个类的封装,通常包括一个抽象工厂类和多个具体工厂类。抽象工厂类定义了创建对象的接口,具体工厂类继承抽象工厂类并实现具体的对象创建方法。通过使用工厂模式,我们可以在不暴露创建逻辑的情况下创建一个对象。

工厂函数和工厂模式都有自己的应用场景,具体取决于需求。如果只需要创建一个对象,并且创建逻辑相对简单,那么可以使用工厂函数。如果需要创建多个不同类型的对象,并且创建逻辑较为复杂,那么可以使用工厂模式。

下面是一个使用工厂函数和工厂模式的示例代码,供参考:
# 工厂函数示例

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

def create_person(name, age):
    return Person(name, age)

person = create_person("Tom", 20)
print(person.name, person.age)


# 工厂模式示例

class Animal:
    def sound(self):
        pass

class Dog(Animal):
    def sound(self):
        return "Woof"

class Cat(Animal):
    def sound(self):
        return "Meow"

class AnimalFactory:
    def create_animal(self, animal_type):
        if animal_type == "dog":
            return Dog()
        elif animal_type == "cat":
            return Cat()

animal_factory = AnimalFactory()
dog = animal_factory.create_animal("dog")
print(dog.sound())

cat = animal_factory.create_animal("cat")
print(cat.sound())

希望能对你有所帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-2-1 11:27:34 | 显示全部楼层    本楼为最佳答案   
你的理解基本上是正确的。

工厂函数是一种简单的方式,它是一个函数,用于创建并返回对象实例。工厂函数通过调用函数名来创建对象。这种方法适用于只需要创建一个对象的情况。

而工厂模式是一种设计模式,它是一种创建对象的方式,可以根据需求创建不同类型的对象。工厂模式包括多个类的封装,通常包括一个抽象工厂类和多个具体工厂类。抽象工厂类定义了创建对象的接口,具体工厂类继承抽象工厂类并实现具体的对象创建方法。通过使用工厂模式,我们可以在不暴露创建逻辑的情况下创建一个对象。

工厂函数和工厂模式都有自己的应用场景,具体取决于需求。如果只需要创建一个对象,并且创建逻辑相对简单,那么可以使用工厂函数。如果需要创建多个不同类型的对象,并且创建逻辑较为复杂,那么可以使用工厂模式。

下面是一个使用工厂函数和工厂模式的示例代码,供参考:
# 工厂函数示例

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

def create_person(name, age):
    return Person(name, age)

person = create_person("Tom", 20)
print(person.name, person.age)


# 工厂模式示例

class Animal:
    def sound(self):
        pass

class Dog(Animal):
    def sound(self):
        return "Woof"

class Cat(Animal):
    def sound(self):
        return "Meow"

class AnimalFactory:
    def create_animal(self, animal_type):
        if animal_type == "dog":
            return Dog()
        elif animal_type == "cat":
            return Cat()

animal_factory = AnimalFactory()
dog = animal_factory.create_animal("dog")
print(dog.sound())

cat = animal_factory.create_animal("cat")
print(cat.sound())

希望能对你有所帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-1 11:36:22 | 显示全部楼层
FishC 发表于 2024-2-1 11:27
你的理解基本上是正确的。

工厂函数是一种简单的方式,它是一个函数,用于创建并返回对象实例。工厂函数 ...

感谢大佬的回答,使我的知识又提升了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-1 11:37:54 | 显示全部楼层
bio911 发表于 2024-02-01 11:36
感谢大佬的回答,使我的知识又提升了


不客气,我很高兴能够帮助你提升知识。如果你还有其他问题,随时向我提问!我会尽力帮助你的。加油!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-1 11:48:32 | 显示全部楼层
本帖最后由 zhangchenyvn 于 2024-2-1 11:49 编辑
FishC 发表于 2024-2-1 11:27
你的理解基本上是正确的。

工厂函数是一种简单的方式,它是一个函数,用于创建并返回对象实例。工厂函数 ...


大概是的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-1 11:49:16 | 显示全部楼层


是的,工厂函数和工厂模式都是一种用于创建对象的方法或模式,但它们在实现上有一些不同。

- 工厂函数是一个函数,用于创建并返回对象实例。它可以根据传入的参数动态选择合适的构造函数,并返回相应的对象实例。这种方式比较简单,适用于只需要创建一个对象的情况。

- 工厂模式是一种设计模式,它通过定义一个抽象工厂类和多个具体工厂类来实现对象的创建。抽象工厂类定义了创建对象的接口,具体工厂类继承抽象工厂类并实现具体的对象创建方法。工厂模式允许客户端代码通过调用工厂类来创建对象,而无需关心具体的对象创建细节。这种方式比较灵活,适用于需要创建多个不同类型的对象,且创建逻辑复杂的情况。

总结起来,工厂函数更简单直接,适用于简单的对象创建;而工厂模式更灵活、可拓展,适用于复杂的对象创建和管理。具体使用哪种方式取决于实际需求和设计思路。

希望能对你有所帮助!如有更多问题,欢迎继续提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-1 11:50:00 | 显示全部楼层
FishC 发表于 2024-2-1 11:49
是的,工厂函数和工厂模式都是一种用于创建对象的方法或模式,但它们在实现上有一些不同。

- 工厂函 ...

是的~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-1 11:50:26 | 显示全部楼层


很高兴能够帮到你!如果还有其他问题,欢迎随时提问。祝你编程学习顺利,不断进步!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-4 13:25:05 | 显示全部楼层
FishC 发表于 2024-2-1 11:27
你的理解基本上是正确的。

工厂函数是一种简单的方式,它是一个函数,用于创建并返回对象实例。工厂函数 ...

你好,大佬,接这个问题再请教下,例子中的Dog()和Cat()是类方法吗?类方法的作用和一般应用在哪个场景呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-4 13:25:25 | 显示全部楼层
bio911 发表于 2024-02-04 13:25
你好,大佬,接这个问题再请教下,例子中的Dog()和C ...


你好!Dog()和Cat()是类的构造方法,也称为类的实例化方法。它们被用于创建Dog和Cat的实例对象。

而类方法是指定义在类中的方法,与实例方法不同的是,类方法使用装饰器@classmethod进行修饰,并且第一个参数是类本身(通常命名为cls),而不是实例对象。类方法可以通过类名直接调用,无需实例化对象。

类方法的作用有以下几个方面:
1. 在不创建对象的情况下,对类进行操作或访问类的属性;
2. 在创建对象之前,对类进行一些预处理或者验证;
3. 在不同的继承关系中,实现多态性,子类可以重写父类的类方法。

类方法应用的场景包括但不限于:
1. 创建单例模式的类,确保只有一个唯一的实例对象;
2. 对类的属性进行处理或者验证;
3. 实现工厂模式、策略模式等设计模式;
4. 在类的实例化之前进行初始化或者预处理。

下面是一个使用类方法的示例代码,来说明一下类方法的使用:
class Student:
    count = 0
    
    def __init__(self, name):
        self.name = name
        Student.count += 1
    
    @classmethod
    def get_count(cls):
        return cls.count

student1 = Student("Tom")
student2 = Student("Jerry")
print(Student.get_count())  # 输出:2

在这个示例中,类变量count用于统计创建的Student对象的数量。类方法`get_count()`返回创建的对象数量,我们可以通过类名直接调用这个类方法来获取对象数量。

希望对你有所帮助,如果还有其他疑问,请继续提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-4 16:02:50 | 显示全部楼层
FishC 发表于 2024-2-4 13:25
你好!Dog()和Cat()是类的构造方法,也称为类的实例化方法。它们被用于创建Dog和Cat的实例对象。

而 ...

收到,谢谢大佬答疑,太感谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-4 16:04:05 | 显示全部楼层
bio911 发表于 2024-02-04 16:02
收到,谢谢大佬答疑,太感谢了


不客气!我很高兴能够解答你的问题。如果以后还有其他疑问,欢迎随时提问,我会尽力帮助你。祝你学习编程的旅程顺利愉快!加油!:)

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 14:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表