关于prototype

03-03-19 leitm
头说用这个做一个连接数据库的模型。JDBC的。

我感觉用prototype做这个没必要,

大家觉的合适吗?

lb26
2003-03-19 16:27
可以试试的!

lb26_1
2003-03-19 16:29
为社么不呢

leitm
2003-03-19 16:44
写是写了。但还是不明白用这个模式完成有什么好处。

banq
2003-03-19 18:08
你能说说你是如何写的吗?这样我们来分析分析这样做是否有好处?

leitm
2003-03-20 09:39
先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多多指点。

richardluopeng
2003-03-21 09:02
连接还是不要clone吧,会不会出问题??

Jevang
2003-03-21 10:01
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?

banq
2003-03-23 12:48
好像你方向出问题了

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

leitm
2003-03-27 10:33
clone后可以work.

头要求这么做。从开始我就觉的别扭。

richardluopeng
2003-03-28 12:29
不会把,如果能实现,一定要告诉我

mem_fox
2003-04-01 12:48
请问用FlyWeight是怎么设计连接池的!!我看见的都是用Factory方法来控制Connection的个数的

muzi119
2003-04-07 10:49
prototype 模式用来做什么比较好呢,这种模式了解了,但是不知道用处。

manbaum
2003-04-07 13:00
> 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;
    }
}
<p>

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

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

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

猜你喜欢
2Go 1 2 下一页