Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 在构建器模式中使用策略模式可以吗_Design Patterns_Strategy Pattern_Builder Pattern - Fatal编程技术网

Design patterns 在构建器模式中使用策略模式可以吗

Design patterns 在构建器模式中使用策略模式可以吗,design-patterns,strategy-pattern,builder-pattern,Design Patterns,Strategy Pattern,Builder Pattern,我很想知道使用策略模式来更改生成器对象的行为是否正常 这是一个例子。假设我们有以下类,我想使用生成器为我的网页创建某种类型的视图模型 建筑时代 建筑工人 战略 战略b 我们将数据1和数据2传递给BuilderA 我们将数据3和数据4传递给BuilderB 假设根据传入的数据,我们希望使用这些策略创建某些视图模型。StrategyA可以生成ViewModelA,StrategyB可以生成ViewModelB。我希望能够单独修改这些策略,而不改变我的构建器 请让我知道,如果这是不清楚,我会解释更多

我很想知道使用策略模式来更改生成器对象的行为是否正常

这是一个例子。假设我们有以下类,我想使用生成器为我的网页创建某种类型的视图模型

建筑时代

建筑工人

战略

战略b

  • 我们将数据1和数据2传递给BuilderA

  • 我们将数据3和数据4传递给BuilderB

  • 假设根据传入的数据,我们希望使用这些策略创建某些视图模型。StrategyA可以生成ViewModelA,StrategyB可以生成ViewModelB。我希望能够单独修改这些策略,而不改变我的构建器

    请让我知道,如果这是不清楚,我会解释更多


    提前谢谢

    既然正常是个问题,我就不得不直截了当地说了

    虽然没有硬性规定,但至少在我看来不应该有,当涉及到模式的使用时,有一个基于动机的惯例

    建设者是一种“创造性模式”,而策略是一种“行为模式”。 有两件事要考虑。 建设者的动机正是要做你所描述的,正如我从你的例子中所看到的那样。然而,我可以理解为什么你会关注这个策略,拥有原型(线索)对象,这些对象基于状态有一些创造性的差异。我当然可以看到这可能会起到什么作用,尽管它对作为一种模式的战略意图有点暴力

    您是否考虑过将原型与装饰器一起使用?
    原型DP的一个典型应用着眼于仅在几个方面不同的对象

    状态的组合。

    正常通常不是我首先考虑的,但它是否适合环境。我还不想给出一个答案,但如果你能举出一个简单的例子来说明你在想什么,我知道我会如何回答所有的问题。我用一个例子更新了我的问题。请让我知道这是否合理;)实际上我还没有试过原型和装饰。我来看看。我问这个问题的主要原因是因为我想探究是否存在一个硬规则,即我们是否可以使用任何行为设计模式(在本例中为策略)来更改构建器模式(或任何其他创造性模式)的行为。总的来说,我个人倾向于混合不同的模式,只要我能用这些词汇表达我的意图。你对此有何想法?是的,我知道这将如何运作,而且我从不认为任何模式混合都有创意,只要先探索传统的选择。我总是这样做,尽管它并不总是像我最初想象的那样。然而,我从不知道,直到我尝试。有时它确实如此,但它从缺乏创造性的类型中吸引了奇怪的目光。如果我们不愿意探索,我们还能学到什么呢。如果你真的决定尝试这个策略,我想知道你的结果如何。我确实实现了它,它在我的场景中运行得很好,但是我的一位同事不喜欢这种混合,我改变了我们的设计,只使用了一个构建器。