标签: factory

Python中的类工厂

我是Python的新手,需要一些建议来实现下面的场景.

我在两个不同的注册商处有两个用于管理域名的课程.两者都具有相同的界面,例如

class RegistrarA(Object):
    def __init__(self, domain):
        self.domain = domain

    def lookup(self):
        ...

    def register(self, info):
        ...
Run Code Online (Sandbox Code Playgroud)

class RegistrarB(object):
    def __init__(self, domain):
        self.domain = domain

    def lookup(self):
        ...

    def register(self, info):
        ...
Run Code Online (Sandbox Code Playgroud)

我想创建一个Domain类,给定一个域名,根据扩展名加载正确的注册器类,例如

com = Domain('test.com') #load RegistrarA
com.lookup()

biz = Domain('test.biz') #load RegistrarB
biz.lookup()
Run Code Online (Sandbox Code Playgroud)

我知道这可以使用工厂函数来完成(见下文),但这是最好的方法吗?还是有更好的方法使用OOP功能?

def factory(domain):
  if ...:
    return RegistrarA(domain)
  else:
    return RegistrarB(domain)
Run Code Online (Sandbox Code Playgroud)

python factory

64
推荐指数
4
解决办法
7万
查看次数

工厂类

就个人而言,我从未理解工厂类的想法,因为直接实例化一个Object似乎更有用.我的问题很简单,在什么情况下使用工厂类模式是最佳选择,出于什么原因,以及良好的工厂类是什么样的?

java oop factory object

51
推荐指数
3
解决办法
5万
查看次数

在IoC顶部的抽象工厂模式?

我决定在一个更大的项目中使用IoC原则.但是,我想得到的东西很长一段时间一直困扰着我.我得出的结论是IoC容器是一种架构模式,而不是一种设计模式.换句话说,没有类应该知道它的存在,并且应该在应用层使用容器本身来缝合所有组件.从本质上讲,它是一个精心设计的面向对象模型的选择.话虽如此,如何在不占用IoC容器的情况下访问已解析的类型(无论它们是否抽象)?我在这里看到的唯一选择是利用使用IoC容器来解析具体类型的抽象工厂.这应该很容易换掉一组标准工厂.这是一个好方法吗?有没有人在这里使用它以及它对你有用吗?还有别的吗?

谢谢!

containers factory inversion-of-control

48
推荐指数
1
解决办法
2万
查看次数

具体对象采用不同构造函数参数时的Java工厂

我正在尝试用Java实现Factory模式.我有一个名为Shape的类,Circle和Triangle扩展.问题是Shape构造函数只获得2个参数,而Circle获得3个参数,因此Triangle(我不会在代码部分显示,因为它与Circle相同).为了更好地展示它:

    private interface ShapeFactory{
        public Shape create(int x, int y);
    }

    private class CircleFactory implements ShapeFactory{
        public Shape create(float radius, int x, int y){ //error
            return new Circle(radius, x,y);
        }
    }
Run Code Online (Sandbox Code Playgroud)

任何想法如何克服这个问题?我不得在工厂内收到用户的意见(必须从外面收到).

谢谢!

java design-patterns factory

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

工厂,抽象工厂和工厂方法

我对这三个术语感到很困惑.

我的理解是:

  • 在工厂模式中,没有混凝土工厂.工厂根据参数构建新对象.

  • 在抽象工厂模式中,有多个混凝土工厂.客户必须明确地创建不同的具体工厂.

是对的吗?

还有什么区别?

此外,什么是工厂方法模式?它与工厂模式相同吗?

design-patterns factory factory-pattern abstract-factory

42
推荐指数
1
解决办法
1万
查看次数

在factory_girl中填充与子项的关联

我有一个模型Foohas_many'Bar'.我为每个对象都有一个factory_girl工厂.Bar的工厂与Foo有关联; 它会在创建Bar时实例化Foo.

我想要一个创建包含Bar的Foo的Factory.理想情况下,这个Bar将通过:bar工厂创建,并尊重用于创建Foo的构建策略(create/build).

我知道我可以调用:bar工厂,然后从新的Bar中获取Foo引用.我想避免这种情况; 在我的测试用例中,重要的对象是Foo; 称酒吧工厂似乎有点迂回曲折.此外,我可以看到需要一个有多个条形的Foo.

这在Factory_girl有可能吗?你如何在父母中定义这种关系?

ruby unit-testing factory ruby-on-rails factory-bot

42
推荐指数
1
解决办法
2万
查看次数

在Java中创建一个不依赖于if-else的工厂方法

目前我有一个基于给定String充当工厂的方法.例如:

public Animal createAnimal(String action)
{
    if (action.equals("Meow"))
    {
        return new Cat();
    }
    else if (action.equals("Woof"))
    {
        return new Dog();
    }

    ...
    etc.
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是在类列表增长时避免整个if-else问题.我想我需要有两个方法,一个将字符串注册到类,另一个根据操作的字符串返回类.

在Java中这样做的好方法是什么?

java string factory

38
推荐指数
5
解决办法
2万
查看次数

如何在实施工厂设计模式时避免"instanceof"?

我正在尝试实现我的第一个工厂设计模式,我不确定在将工厂制造的对象添加到列表时如何避免使用instanceof.这就是我想要做的:

for (ABluePrint bp : bluePrints) {
    AVehicle v = AVehicleFactory.buildVehicle(bp);
    allVehicles.add(v);

    // Can I accomplish this without using 'instanceof'?
    if (v instanceof ACar) {
        cars.add((ACar) v);
    } else if (v instanceof ABoat) {
        boats.add((ABoat) v);
    } else if (v instanceof APlane) {
        planes.add((APlane) v);
    }
}
Run Code Online (Sandbox Code Playgroud)

从我在SO上看到的,使用'instanceof'是代码气味.有没有更好的方法来检查工厂创建的车辆类型而不使用'instanceof'?

我欢迎任何关于我的实施的反馈/建议,因为我不确定我是否正确地采用了这种方式.

完整示例如下:

import java.util.ArrayList;

class VehicleManager {

    public static void main(String[] args) {

        ArrayList<ABluePrint> bluePrints = new ArrayList<ABluePrint>();
        ArrayList<AVehicle> allVehicles = new ArrayList<AVehicle>();
        ArrayList<ACar> cars = new ArrayList<ACar>();
        ArrayList<ABoat> boats = new …
Run Code Online (Sandbox Code Playgroud)

java design-patterns factory instanceof factory-pattern

37
推荐指数
1
解决办法
2万
查看次数

35
推荐指数
4
解决办法
2万
查看次数

在C++中返回对象

从类中返回对象时,何时是释放内存的正确时间?

例,

class AnimalLister 
{
  public:
  Animal* getNewAnimal() 
  {
    Animal* animal1 = new Animal();
    return animal1;
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我创建一个Animal Lister的实例并从中获取Animal引用,那么我应该在哪里删除它?

int main() {
  AnimalLister al;
  Animal *a1, *a2;
  a1 = al.getNewAnimal();
  a2 = al.getNewAnimal();
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是AnimalLister没有办法跟踪动物创建的列表,所以我如何更改这些代码的逻辑以便有办法删除创建的对象.

c++ memory-management factory

34
推荐指数
5
解决办法
2万
查看次数