我似乎无法掌握工厂的正确概念.
谁能帮我编码一个简单的测试?我通过互联网阅读了一些文本,并且无法用同样的方式编写代码.其实我无法理解这个过程.复制代码很简单,但我需要了解为什么这不起作用.
class Factory: def __init__(self): self.msg = "teste" def fabricateAnotherObject(self,obj,**kwargs): return apply(obj,**kwargs) class testClass: def __init__(self,nome,salario,endereco): self.nome = nome self.salario = salario self.endereco = endereco def __str__(self): return "Nome: " + str(self.nome) + "\nEndereco: " + str(self.endereco) + "\nSalario: " + str(self.salario) a = Factory() emp = a.fabricateAnotherObject(testClass,"George",2000,"Three Four Five Avenue") print str(emp)
Juergen.. 13
你的代码适得其反(抱歉,我必须说出来).
工厂的意义是,您不必在创建它的位置知道构造对象的类.
原因是,对象创建在面向对象的抽象中创造了一个空白.你必须具体创建对象.但有时你只想创建一个具有某种行为的对象,但是其他人应该(集中)决定它是什么具体的类.
例如,您必须在100个位置创建一种对象.但是后来您可能会发现,您必须更改课程 - 您必须更改所有这些地方.
工厂将通过定义您必须更改的一个地方来消除这种需求.
最简单的工厂是:
def fabricateAnotherObject(self, **kwargs): return testClass(**kwargs)
当然,在某些情况下这可能没什么帮助.因此,一些工厂也可能从db或其他配置加载类名.但最简单的解决方案是对象的硬编码构造 - 当您选择始终调用此方法时,只有在我们的示例中必须更改此方法.
一个更动态的解决方案(不需要db):
class Factory(object): def __init__(self, theClass): self.theClass = theClass def create(self, **kwargs): self.theClass(**kwargs) myFactory = Factory(testClass)
myFactory实例可以在不同的位置使用,以创建正确的实例.问题是,如何初始化myFactory - 在一些特殊模块中?
你的代码适得其反(抱歉,我必须说出来).
工厂的意义是,您不必在创建它的位置知道构造对象的类.
原因是,对象创建在面向对象的抽象中创造了一个空白.你必须具体创建对象.但有时你只想创建一个具有某种行为的对象,但是其他人应该(集中)决定它是什么具体的类.
例如,您必须在100个位置创建一种对象.但是后来您可能会发现,您必须更改课程 - 您必须更改所有这些地方.
工厂将通过定义您必须更改的一个地方来消除这种需求.
最简单的工厂是:
def fabricateAnotherObject(self, **kwargs): return testClass(**kwargs)
当然,在某些情况下这可能没什么帮助.因此,一些工厂也可能从db或其他配置加载类名.但最简单的解决方案是对象的硬编码构造 - 当您选择始终调用此方法时,只有在我们的示例中必须更改此方法.
一个更动态的解决方案(不需要db):
class Factory(object): def __init__(self, theClass): self.theClass = theClass def create(self, **kwargs): self.theClass(**kwargs) myFactory = Factory(testClass)
myFactory实例可以在不同的位置使用,以创建正确的实例.问题是,如何初始化myFactory - 在一些特殊模块中?
工厂模式适用于不允许将函数(和类)作为一阶值(例如C ++或Java)的编程语言。
这个想法是,您将“工厂”类的实例作为参数传递给某个函数(或方法或构造函数),然后将其用于生成新的对象实例(通常是超类的某些特定子类的实例,即事先知道)。
在Python中,您可以只传递类(因为类(和函数)也是对象)。