我试图在Java中实现一个工厂模式。 我有一个叫圆形和三angular形的类。 问题是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); } } 任何想法如何克服这个问题? 我不能接收工厂内的用户input(必须从外部接收)。 谢谢!
目前我有一个方法,作为基于给定的string的工厂。 例如: public Animal createAnimal(String action) { if (action.equals("Meow")) { return new Cat(); } else if (action.equals("Woof")) { return new Dog(); } … etc. } 我想要做的是在类的列表增长时避免整个if-else问题。 我想我需要有两种方法,一种是将string注册到类,另一种是基于操作的string返回类。 在Java中这样做的好方法是什么?
我有一个has_many'Bar'的Foo模型。 我有一个factory_girl工厂为每个这些对象。 Bar的工厂有一个Foo的协会; 它会在创buildBar时实例化一个Foo。 我想要一个创build一个包含一个Bar的Foo的工厂。 理想情况下,这个Bar将通过:bar工厂创build,并且尊重用于创buildFoo的构build策略(创build/构build)。 我知道我可以调用:bar工厂,然后从新Bar中获取Foo引用。 我想避免这个; 在我的testing案例中,重要的对象是Foo; 打电话给Bar工厂似乎有点迂回。 另外,我可以看到有多个酒吧的Foo的需要。 这可能在factory_girl? 你如何在家长中定义这种关系?
就我个人而言,我从来没有理解过工厂类的想法,因为直接实例化一个对象似乎更为有用。 我的问题很简单,在什么情况下使用工厂类模式是最好的select,什么原因,以及一个好的工厂类是什么样的?
当从一个类中返回对象时,什么时候释放内存? 例, class AnimalLister { public: Animal* getNewAnimal() { Animal* animal1 = new Animal(); return animal1; } } 如果我创build动物列表的一个实例,并从它得到动物的参考,那么我应该删除它呢? int main() { AnimalLister al; Animal *a1, *a2; a1 = al.getNewAnimal(); a2 = al.getNewAnimal(); } 这里的问题是AnimalLister没有办法跟踪创build的动物列表,所以我如何改变这种代码的逻辑来删除创build的对象。
我决定在一个更大的项目上使用IoC原则。 不过,我想弄清楚一直困扰着我的东西。 我得出的结论是,一个IoC容器是一个架构模式,而不是一个devise模式。 换句话说,没有一个类应该知道它的存在,并且应用程序层使用容器本身来拼接所有组件。 本质上,它是一个select,在一个devise良好的面向对象模型之上。 话虽如此,如何在不将IoC容器遍布整个地方的情况下(无论是否抽象)访问已parsing的types呢? 我在这里看到的唯一select是利用使用IoC容器来parsing具体types的抽象工厂。 这应该很简单,可以换出一套标准的工厂。 这是一个好方法吗? 有没有人在这里使用它,它对你有多好? 还有其他的东西吗? 谢谢!
我是Python的新手,需要一些build议来实现下面的场景。 我有两个class级来pipe理两个不同注册商的域名。 两者都有相同的接口,例如 class RegistrarA(Object): def __init__(self, domain): self.domain = domain def lookup(self): … def register(self, info): … 和 class RegistrarB(object): def __init__(self, domain): self.domain = domain def lookup(self): … def register(self, info): … 我想创build一个Domain类,给定一个域名,根据扩展名加载正确的注册器类,例如 com = Domain('test.com') #load RegistrarA com.lookup() biz = Domain('test.biz') #load RegistrarB biz.lookup() 我知道这可以使用工厂函数来完成(见下文),但是这是做这件事的最佳方式还是使用OOPfunction有更好的方法? def factory(domain): if …: return RegistrarA(domain) else: […]
最近我一直在考虑保护我的一些代码。 我很好奇如何确保一个对象不能直接创build,但只能通过工厂类的一些方法。 让我们说我有一些“业务对象”类,我想确保这个类的任何实例将有一个有效的内部状态。 为了实现这一点,我需要在创build一个对象之前执行一些检查,可能是在它的构造函数中。 这一切都可以,直到我决定让这个检查成为业务逻辑的一部分。 那么,我怎样才能安排一个业务对象,只能通过业务逻辑类中的某种方法创build,而不能直接创build? 使用C ++的旧“好友”关键字的第一个自然愿望将与C#不兼容。 所以我们需要其他的select 我们来看一个例子: public MyBusinessObjectClass { public string MyProperty { get; private set; } public MyBusinessObjectClass (string myProperty) { MyProperty = myProperty; } } public MyBusinessLogicClass { public MyBusinessObjectClass CreateBusinessObject (string myProperty) { // Perform some check on myProperty if (true /* check is okay */) return new […]
我正在寻找与硬编码的JSON文件本地开发。 我的JSON文件如下(放入JSONvalidation器时有效): { "contentItem": [ { "contentID" : "1", "contentVideo" : "file.mov", "contentThumbnail" : "url.jpg", "contentRating" : "5", "contentTitle" : "Guitar Lessons", "username" : "Username", "realname" : "Real name", "contentTags" : [ { "tag" : "Guitar"}, { "tag" : "Intermediate"}, { "tag" : "Chords"} ], "contentAbout" : "Learn how to play guitar!", "contentTime" : [ […]
Angular在文档中明确指出服务是单身人士: Angular services are singletons 反直觉地, module.factory也返回一个Singleton实例。 鉴于非单身服务有很多用例,实现工厂方法返回服务实例的最好方法是什么,以便每次声明一个ExampleService依赖时,它都会被一个不同的实例ExampleService ?