标签: factory-pattern

Javascript工厂模式变量范围

我正在按照教程显示工厂模式以在javascript中创建对象.下面的代码让我难以理解它的工作原理.

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>6-2.htm</title>
</head>
<body>
<script type="text/javascript">
function createAddress(street, city, state, zip) {
  var obj = new Object();
  obj.street = street;
  obj.city = city;
  obj.state = state;
  obj.zip = zip;
  obj.showLabel = function() {
    //alert(this.street + "\n" + this.city + ", " + this.state + " " + this.zip);
    //var obj;
    alert(obj.street + "\n" + obj.city + ", " + obj.state + " " + obj.zip);
  };
  return obj;
};

var JohnAddr = …
Run Code Online (Sandbox Code Playgroud)

javascript scoping factory-pattern

3
推荐指数
1
解决办法
2024
查看次数

处理器工厂与依赖注入设计

我的项目已包含一些处理程序的工厂(代码非常简化):

class HandlersFactory
{
    private static readonly Dictionary<string, IHandler> registeredHandlers =
        new Dictionary<string, IHandler>
        {
            { "First", new FirstHandler() },
            { "Second", new SecondHandler() },
            { "Third", new ThirdHandler() },
        };

    public bool IsRegisteredHandler(string name)
    {
        return registeredHandlers.ContainsKey(name);
    }

    public IHandler GetHandler(string name)
    {
        if (!IsRegisteredHandler(name))
            return null;

        return registeredHandlers[name];
    }
}
Run Code Online (Sandbox Code Playgroud)

处理程序列表是硬编码的.工厂位于主程序集中,但应用程序可以在运行时使用其他程序集进行扩展(主应用程序搜索它们并在开始时加载).附加组件定制应用程序

必须有可能从主程序集中"替换"一些处理程序(提供另一个逻辑).因此,例如,工厂将按CustomSecondHandler名称"Second" 返回,而不是SecondHandler在加载其他程序集时返回.我能够重写工厂,但更改不得影响已经使用它的代码.

我想过将字典初始化移动到RegisterHandlers可以在自定义工厂中重写的某些方法.并添加工厂的依赖注入,因此附加组件提供从现有工厂派生的工厂自己的实现.如果未加载其他程序集,则使用默认工厂.但我觉得这种方法有问题.

请提出你的想法.我需要一个干净的解决方案,只需要最少的代码编写,以提供将取代现有的自定义处理程序

谢谢.

c# design-patterns dependency-injection factory-pattern

3
推荐指数
1
解决办法
809
查看次数

替代工厂模式可能有数百个小类

我正在开发一个用GoLang编写的小型游戏/模拟器,其中可能有数百种能力.对于每个玩家,他们将拥有1到3个技能.我将这些存储与字符串或ID.实例化这些能力的最佳方法是什么.通常情况下,我会使用一个工厂级,但我说的多,我不确定这是最好的方法.

design-patterns go factory-pattern

3
推荐指数
1
解决办法
1052
查看次数

如何使用泛型而不是注释来实现构建器类?

我想编写一个通用的构建器类,它包含任何 java 类并提供特定样式的 setter 函数。我不确定这是否可以称为“动态生成的函数”。

当我有一个豆豆 Pojo 类时,即

class Pojo {
    public void setValue(int value) {...}
    public void setName(String name) {...}
}
Run Code Online (Sandbox Code Playgroud)

我的Maker班级应该可以这样使用:

Pojo p = Builder<Pojo>.create(new Pojo())
             .setName("Funny")
             .setValue(123)
             .build();
Run Code Online (Sandbox Code Playgroud)

如您所见,它所做的工作应该类似于

class PojoBuilder {
    private Pojo pojo;
    PojoBuilder(Pojo pojo) { this.pojo = pojo; }
    public static PojoMaker create(Pojo p) { return new PojoBuilder(p); }
    public PojoBuilder setName(String name) { pojo.setName(name); return this; }
    public PojoBuilder setValue(int val) { pojo.setValue(val); return this; }
    public Pojo make() …
Run Code Online (Sandbox Code Playgroud)

java generics wrapper factory-pattern

3
推荐指数
2
解决办法
6561
查看次数

没有if,切换实现Factory的最佳方法

我正在寻找许多方法来实现Java中的Factory模式,但仍然找不到一个完美的方法,如果/ switch plus不使用反射,则不会受到影响.我找到的最好的一个是Tom Hawtin在这里的答案:https://stackoverflow.com/a/3434505/1390874

但我最担心的是它将匿名类的HashMap存储在内存中.

问题是除了Tom Hawtin的答案之外,人们还会考虑使用Class.newInstance()吗?这样可以避免我们在内存中存储不必要的匿名类吗?加上代码会更干净.

它看起来像这样:

class MyFactory {
    private static final Map<String,Class> factoryMap =
        Collections.unmodifiableMap(new HashMap<String,Class>() {{
            put("Meow", Cat.class);
            put("Woof", Dog.class);
    }});

    public Animal createAnimal(String action) {
        return (Animal) factoryMap.get(action).newInstance();
    }
}
Run Code Online (Sandbox Code Playgroud)

java design-patterns factory factory-pattern

3
推荐指数
2
解决办法
4809
查看次数

工厂类来处理构造函数的逻辑?

我有一个迷宫类,它有一个构造函数:

public class Maze implements MazeInterface {

  private int width;          // Width of maze in units
  private int height;         // Height of maze in units
  private long seed;          // Seed generated for the maze
  private Cell[][] board;     // 2D representation of the maze

  public Maze(int w, int h, Cell[][] maze, long s){
      width = w;
      height = h;
      board = maze;
      seed = s;
  }

  // Bunch of other methods/stuff irrelevant

}
Run Code Online (Sandbox Code Playgroud)

我在网上阅读有关良好做法的信息,现在我明白复杂的构造函数是不好的做法。所以我认为工厂类将是一个可行的解决方案。我想要做的是为迷宫生成一个随机种子、随机 w/h 值(迷宫的宽度或高度有多少个单位),以及迷宫对象的其他逻辑。工厂模式是正确的方法吗?

public class MazeFactory {

  public …
Run Code Online (Sandbox Code Playgroud)

java design-patterns factory-pattern

3
推荐指数
1
解决办法
1064
查看次数

Symfony3工厂即服务

我一直试图解决这个问题

http://symfony.com/doc/current/service_container/factories.html

但是似乎有一块缺失让所有人都厌倦了或者我完全忽略了这一点.

该示例具有工厂类

class NewsletterManagerFactory
{
    public static function createNewsletterManager()
    {
        $newsletterManager = new NewsletterManager();

        // ...

        return $newsletterManager;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后通过服务将该工厂配置为工厂类和NewsletterManager服务方法.

services:
    app.newsletter_manager_factory:
        class: AppBundle\Email\NewsletterManagerFactory

    app.newsletter_manager:
        class:   AppBundle\Email\NewsletterManager
        factory: 'app.newsletter_manager_factory:createNewsletterManager'
Run Code Online (Sandbox Code Playgroud)

所以现在我们有一个通过param NewsletterManager知道NewsletterManagerFactoryClass的Classfactory:services.yml

你如何利用这种配置?现在暴露在内的NewsletterManager是什么让我可以createNewsletterManager在工厂上课?

据我所知,这两项服务仍然是完全分开的?

service factory-pattern symfony

3
推荐指数
2
解决办法
4289
查看次数

如何使用工厂模式解决多个第三方api

我一直在研究基于 PHP 中 Laravel 框架的 API,但这不是特定于该语言的。API 中使用了许多第三方 API,并且有许多多种配置。所以我想创建一个 HTTP 客户端工厂类,在代码中,我打算为此创建一个对象并将 API 名称作为参数传递。主要问题是如何根据特定 API 的名称将其解析为各种类?那就是当我给谷歌时,它需要初始化谷歌类并返回谷歌API客户端,对于其他API,它应该用相应的客户端响应。

我有一个困惑,比如这是工厂模式的正确用例,如果不是,是否有任何其他模式或标准方法可以做到这一点,而不是分别调用每个 API 客户端。?

design-patterns factory-pattern

3
推荐指数
1
解决办法
1738
查看次数

在 Magento 2 中,工厂模式是什么,用于什么?

在 Magento 2 中,什么是工厂模式并用于?我是 magento 的新手,所以请您详细解释一下。

design-patterns factory-pattern magento2

3
推荐指数
1
解决办法
4269
查看次数

澄清工厂方法设计模式的UML类图

我正在学习工厂方法设计模式,并在教程中发现了以下类图。我理解产品和具体产品部分,但 Creator 和 ConcreteCreator 部分对我来说有点模糊。如果有人澄清 UML 图,我将不胜感激。谢谢。 在此处输入图片说明

uml design-patterns factory-pattern

3
推荐指数
1
解决办法
3156
查看次数