忘记曾经在哪里看到过这样的一句话,文件的命名是相当的重要的,在开发的过程,程序员应该充分利用这一强大的功能.大概意思是这样吧,由于最近大脑萎缩得厉害很多东西记不住.
现在发一份关于使用文件名而实现工厂模式的文章,希望大家都能过来踩踩.实现语言是使用python
文件如下:
—-main.py
—-infactory
—-Bfactory
—-Afactory
功能: 通过main.py生成Afactory和Bfactory实例,如果看过head first 设计模式的话,可以知道传统的工厂模式实现说白了就是在另外一个内使用if,else来控制传入的参数在生成实例.现在我使用python的动态导入功能来实现这一功能,核心的一个语句就是 __import__(param, globals(), locals(), [param], -1).
接下来我先post出我的main.py是怎么写的:
def instanceFactory(param):
try:
temp = __import__(param, globals(), locals(), [param], -1)
instance=temp.factory()
instance.tostring()
except:
print param+” not found!”
def main():
instanceFactory(’Afactory’)
instanceFactory(’Bfactory’)
infactory.py:
class infactory:
def create(self):
pass
def tostring(self):
pass
Afactory.py:
from infactory import infactory
class factory(infactory):
def create(self):
print ‘A factory!’
def tostring(self):
print ‘A factory!’
Bfactory.py:
from infactory import infactory
class factory(infactory):
def create(self):
print ‘B factory!’
def tostring(self):
print ‘B factory!’
但是这样有个瑕疵就是Bfactory.py和Afactory.py里面的类名是相同的,因为 temp = __import__(param, globals(), locals(), [param], -1)这条语句的作用只是import了Bfactory.py和Afactory.py并没有进行实例,如果是使用Java的话可以使用class.forname(),所以只好折中将AB的类名都命名为factory,然后加入instance=temp.factory()进行实例.懒得折腾wp的排版有兴趣的朋友可以download完整的源代码,如下:
https://zaysky.googlecode.com/svn/trunk/design/infactory.rar

