关于prototype

头说用这个做一个连接数据库的模型。JDBC的。
我感觉用prototype做这个没必要,
大家觉的合适吗?

可以试试的!

为社么不呢

写是写了。但还是不明白用这个模式完成有什么好处。

你能说说你是如何写的吗?这样我们来分析分析这样做是否有好处?

先clone出一个,然后传入参数,返回一个connectiion.
public class ConnectDB implements Cloneable{
private java.util.Properties prop= new java.util.Properties();
private String strUrl = null;
/**
* Constructor
*/
public ConnectDB(){
}
public Object clone()
{
try{
return super.clone();
}catch(CloneNotSupportedException cnse){
cnse.printStackTrace();
return null;
}
}
public void setProp(java.util.Properties tmpPro){
prop= tmpPro;
}
public void setUrl(String tmpUrl){
strUrl = tmpUrl;
}
public Connection connect(String strDriver){
try{
Class.forName(strDriver).newInstance();
Connection Conn = DriverManager.getConnectionstrUrl,prop);
return Conn;
}catch(Exception e){
return null;
}
}
请banq多多指点。

连接还是不要clone吧,会不会出问题??

Not quite understand the topic name "prototype"?
If you want to build a wrapper on top a JDBC library, i think it's very useful as it can hide the difference jdbc drivers vary from vendor or version.
Or are you trying to build a connection factory?

好像你方向出问题了

连接池是使用FlyWeight模式的,使用clone来克隆connection,这能work吗?我以前好像听说过你这种情况,你能否详细谈谈?

clone后可以work.
头要求这么做。从开始我就觉的别扭。

不会把,如果能实现,一定要告诉我

请问用FlyWeight是怎么设计连接池的!!我看见的都是用Factory方法来控制Connection的个数的

prototype 模式用来做什么比较好呢,这种模式了解了,但是不知道用处。

> prototype
> 模式用来做什么比较好呢,这种模式了解了,但是不知道用处
> ?

不知道我的想法对不对,拿出来和大家讨论。如果出现下面的情况,prototype 就会很有用。


public class MyEnv
{
private Class1 attr1;
private Class2 attr2;
... ...
private ClassN attrN;

public MyEnv()
{
}

public InitEnv()
{
// ...经过复杂的运算...
... ...
// 终于算出初始值
attr1 = ...;
attr2 = ...;
... ...
attrN = ...;
}

public MyEnv Clone()
{
MyEnv newEnv = new MyEnv();
newEnv.attr1 = attr1;
newEnv.attr2 = attr2;
... ...
newEnv.attrN = attrN;
return newEnv;
}
}

构造 MyEnv 后对其初始化需要的开销很大,那么,当再次构造同类型的对象时,用 Clone() 可以减少这种开销。

类似的例子比如 C Runtime Lib 里的 dup() 函数。由于操作系统打开一个文件(或设备)需要很大开销,当打开同一个文件时,可以对已有的文件描述符做一个 dup(),这样就避免了很多开销, dup() 以后,你可以对新产生的文件描述进行修改,比如存取模式等,使之符合你的要求。

还有一种情况下要使用 prototype。如果你得到的是一个基类型(如 Object 类型)的对象,甚至只是个接口,你并不知道对象的原型类是什么,而你又需要动态的生成此对象的同类时,就需要用到 Clone() 方法。