这是一个工厂模式,如果要知道详细的可以看《设计模式》
以下是我按照你的说法写的一些代码(伪代码)应该符合你这个问题。需要注意的是createUser在什么地方实现是没人知道的,你看我的代码实例就知道啦。
//虚基类Env
abstract Class Env
{
ForumFactory getForumFactory();
}//Env的派生类
Class MyEnv extends Env
{
//getForumFactory在派生类实现,返回一个FornumFactory的派生类,
//可能是MyForumFactory,也可能是YourForumFactory,也可以是
ForumFactory getForumFactory()
{
return MyForumFactory();
}
}//实现另一个Env的派生类,起说明作用
Class YourEnv extends Env
{
//看这个是返回YourForumFactory()
ForumFactory getForumFactory()
{
return YourForumFactory();
}
}参考以下代码
Env env=new MyEnv();
ForumFactory factory=env.getForumFactor();

Env env=new YourEnv();
ForumFactory factory=env.getForumFactor();两段代码的factory是不同的引用。一个引用MyForumFactory,一个引用YourForumFactory
这两个类都是ForumFactory的子类。
如果ForumFactory定义如下:
abstract Class ForumFactory{
UserManager getUserManager();
}子类如下:
Class MyForumFactory extends ForumFactory
{
//特别注意这个段我返回的是MyUserManager
UserManager getUserManager()
{
return MyUserManager();
}
}
//下面是另一个子类
Class MyForumFactory extends ForumFactory
{
//特别注意这个段我返回的是YourUserManager
UserManager getUserManager()
{
return YourUserManager();
}
}
代码
Env env=new MyEnv();
ForumFactory factory=env.getForumFactor();
UserManager manager=factory.getUserManager();

Env env=new YourEnv();
ForumFactory factory=env.getForumFactor();
UserManager manager=factory.getUserManager();
看到没有这两个manager就不一样啦,一个是MyUserManager,一个是YourUserManager
这两个类实现UserManager接口。
interface UserManager{
User createUser(username, password, email);
}Class MyUserManager implement UserManager
{
User createUser(username, password, email)
{
//做一些事情然后
//这里也可以同上面一样new MyUser或者new YourUser,只要他们都
                  //实现了User
return new MyUser(username, password, email);

}
}Class YourUserManager implement UserManager
{
User createUser(username, password, email)
{
//做一些事情然后
//这里也可以同上面一样new MyUser或者new YourUser,只要他们都
                  //实现了User
return new YourUser(username, password, email);

}
}
这样就OK啦,更新之后的代码是Env env=new MyEnv();
ForumFactory factory=env.getForumFactor();
UserManager manager=factory.getUserManager();
User user=manager.createUser(username, password, email);

Env env=new YourEnv();
ForumFactory factory=env.getForumFactor();
UserManager manager=factory.getUserManager();
User user=manager.createUser(username, password, email);
如果按照前面的类定义,最后生成的User就是不一样的。
最重要的是如果我们要生成YourUser或者是HerUser,只需要改变第一句
Env env=new HerEnv();
当然你必须实现相关的类,这样客户代码就和实现分开啦。
在你的代码中
//Env myEnv=new MyEnv();
UserManager userManager = myEnv.getForumFactory().getUserManager();
User user = userManager.createUser(username, password, email);
就是按照这种设计方法来的。
如果你对多态不了解,就去看看多态吧。另外建议你读设计模式。

解决方案 »

  1.   

    正在学习<设计模式>:)
    先用WINRAR解开它的JAR文件包,再用DECAFE等反编译工具对CLASS文件解码,应该能找到一些你想要的东西.
      

  2.   

    to liujiboy:
    非常感谢你的回答,你写的我完全能看得懂,而jive用到的一些模式向factory,proxy等我也可以看懂,可就是看jive源代码时,这个地方找不到来龙去脉!
    谢谢,我在想一下,把弄明白了的地方,贴在下面就结贴。
    再一次谢谢你
      

  3.   

    明白了,秘密就在dbForumFactry和dbUsermanager里面,谢谢liujiboy(liujiboy)
    你的回答真是简单易懂,还很不错,谢谢!