工厂和工厂原型有助于创建对象。在设计新应用程序时:
我很困惑哪一个用在哪里。
我知道这可能是针对特定问题的,但是有没有一般的指导原则?
思想?
答案 0 :(得分:7)
我将假设您正在谈论抽象工厂设计模式(不应与工厂方法混淆,后者是另一种创造性设计模式)。
两者之间的差异并不太明显,因为它们可以重叠并以互补的方式使用。由于原型创建了自身的克隆,包括其所有属性,它通常只由一个抽象工厂创建一次,然后克隆每个必需的对象(不需要再次填充其字段)。
Prototype因此避免了不必要的“新”调用,因为克隆了对象并且没有创建。然而,在大多数现代OOP语言中,我不会说它是如此重要。我的两分钱:如果你没有真正看到差异,那就继续使用你习惯实施的那个(也就是抽象工厂)。
答案 1 :(得分:4)
我认为是,
在工厂方法中,我们返回我们感兴趣的新类型实例,在原型中相关的子类使用clone方法返回自身的实例
更具体的工厂方法创建是通过继承来实现的,就像通过委托创建原型一样,即多态。
在我的观点中,
每当您认为需要一个类的重复状态或具有预设状态的对象的克隆时,您需要使用原型。
答案 2 :(得分:3)
Prototype最好被认为是一种优化Factory(复制而不是create)或执行依赖注入(为特定实现/配置配置工厂)的方法。
答案 3 :(得分:3)
正如我所看到的,虽然两者都是创作模式,但工厂和原型模式在不同的环境中使用。
工厂模式用于引入对象之间的松散耦合,因为工厂将处理从客户端隐藏它的所有实例化逻辑。
另一方面,当创建对象的成本很高并且复制现有实例而不是创建新实例时,可以使用原型模式。
答案 4 :(得分:0)
工厂模式基于明确定义的类层次结构创建对象。调用者可以传入参数,工厂使用它们来确定要创建哪些对象。原型模式在对象创建过程之上添加了一个额外的抽象层。使用原型模式,对象的创建(或克隆)基于运行时对象,而不仅仅是基于类层次结构。
抽象工厂可以在幕后使用原型来增加其提供不同类实例的灵活性。
可以在此处找到原型模式的更详细说明:https://github.com/1gravity/design_patterns/tree/main/src/main/kotlin/com/onegravity/designpatterns/prototype