gpt4 book ai didi

design-patterns - 工厂模式和 builder 模式(混合两种或多种模式)

转载 作者:行者123 更新时间:2023-12-03 20:17:56 26 4
gpt4 key购买 nike

我知道这个问题被问了很多次,看起来这个问题是重复的,但我试图理解 SO、谷歌、GoF 上的帖子,但没有找到适合我的答案......

我理解工厂方法和生成器之间的区别:
工厂方法 - 创建从特定基类派生的对象,将具体实现与客户端分离

Builder 方法 - 对客户端隐藏对象创建的复杂性

现在我看到我在互联网上找到的示例( Abstract Factory Design Pattern for Dependency Injection ),它是关于抽象工厂的,但这对我的问题无关紧要。这只是我看过的众多文章中的一篇

//Abstract Factory for Dependency Injection
//Factory interface
public interface Module1ServiceFactory {
ComponentA getComponentA();
ComponentB getComponentB();
}

//Concrete factory
public class Module1ServiceFactoryImpl {
private Module1ServiceFactory instance;

private Module1ServiceFactoryImpl() {}

public static synchronized Module1ServiceFactory getInstance() {
if (null == instance) {
instance = new Module1ServiceFactoryImpl();
}

return instance;
}

*** SUBJECT METHOD ***
public ComponentA getComponentA() {
ComponentA componentA = new ComponentAImpl();
ComponentB componentB = getComponentB();
componentA.setComponentB(componentB);
return componentA;
}

public ComponentB getComponentB() {
return new ComponentBImpl();
}
}

我在那个例子中看到, ComponentA 是一个复杂的类型, getComponentA() 方法用来构建它。
  • 那么为什么这被称为工厂而不是 builder ???或者表示 Module1ServiceFactoryImpl 实现了 Factory builder 模式?
  • 在软件架构设计中创建实现多个设计模式的类/对象是否正确(常用)?

  • 对不起我的英语:)

    最佳答案

    So why this is called Factory and not Builder??? Or it means that Module1ServiceFactoryImpl implement Factory AND Builder patterns?



    之所以叫工厂,是因为它是工厂,而且是唯一的工厂
    *** SUBJECT METHOD ***
    public ComponentA getComponentA() {
    ComponentA componentA = new ComponentAImpl();
    ComponentB componentB = getComponentB();
    componentA.setComponentB(componentB);
    return componentA;
    }

    public ComponentB getComponentB() {
    return new ComponentBImpl();
    }

    我在这里看不到 build 者。当然,这不是最简单的方法,但如果引入了构建器模式,它绝对不会像现在那样复杂。这更像是 JavaBean 方式并在新创建的对象上使用 setter。 builder 模式需要在最后一步创建对象,使得创建的对象不可能处于准备使用和尚未准备好的状态。

    Is it correct (commonly used) to create classes/objects that implements more than one design pattern in software architecture design?



    是的,它是正确的,有时会被使用。不那么常见,因为每个模式都会增加一些复杂性,而多个模式会增加多种复杂性:) 但是,当然,您可以将 builder 与 factory(构建器需要一些被分解的部分)、facory 与 builder(工厂封装创建对象的使用)混合使用与 build 者)。模式有利于协同工作。 MVC 是很好的示例:

    GoF(四人组)并不将 MVC 称为一种设计模式,而是将其视为“一组用于构建用户界面的类”。在他们看来,它实际上是其他三种经典设计模式的变体:观察者(Pub/Sub)、策略和复合模式。根据 MVC 在框架中的实现方式,它还可以使用工厂和装饰器模式。

    http://addyosmani.com/blog/understanding-mvc-and-mvp-for-javascript-and-backbone-developers/

    关于design-patterns - 工厂模式和 builder 模式(混合两种或多种模式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11098682/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com