关于在工厂模式中使用newInstance的困惑

在以前的帖子里面看到Banq大哥说,使用newInstance可以降低系统的耦合,
主要是可以在代码里面完全消灭具体产品的类名,当时觉得也看明白了.但是最近在一个项目中使用工厂模式时尝试着使用这种方法发现了一些问题.
如有一个产品的构造函数是:
public User(Privilege pri)
那么在工厂中要想得到这个产品的对象就不能够单单使用newInstance,因为这个方法只能调用无参的构造函数.解决的办法是在User中不在构造函数
中进行初始化,而是在User对象中写一个setPrivilege(Privilege pri)方法,在工厂中调用了newInstance生成User对象后再向User中设置这个参数.
但是根据我的理解,工厂模式的目的在于可以使客户程序员方便的创建一类对象,对客户程序员隐藏了对象创建的细节,但是如果使用以上的方法,那么无疑就是把对象创建的细节暴露给了客户程序员,这还能达到工厂模式的目的么?在下是在是很困惑,盼望各位达人不吝赐教!

可以采用抽象工厂模式,再用抽象方法模式,关于根据权限取得用户,可以采用代理模式,benq在他的书中讲的应该很清楚!