Never give up!

如果说软件开发是一条布满荆棘的坎坷之路,那么我会每天在这道路两旁书上“火焰舞者,到此一游!”。

 

Prototype(原型)

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.
通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建,所以Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节。
以细胞为例:细胞a克隆出细胞b,细胞a、b具有相同的属性
如果以一般的做法我们会这样:
public class Cell {
    
    
// 细胞壁
    private String cellWall = null;
    
    
// 细胞膜
    private String membrane = null;
    
    
// 细胞核
    private String nucleus = null;
    
    
/**
     * 省略get、set方法
     
*/


客户端调用:
        // 产生细胞A
        Cell cellA = new Cell("细胞壁""细胞膜""细胞核");

        
/* 产生与A同样的细胞B  */
        Cell cellB 
= new Cell();
        cellB.setCellWall(cellA.getCellWall());
        cellB.setMembrane(cellA.getMembrane());
        cellB.setNucleus(cellB.getNucleus());
这种繁琐而重复性高的复制能不能只写一遍呢?答案是“有”

public class Cell implements Cloneable {
    
    
// 细胞壁
    private String cellWall = null;
    
    
// 细胞膜
    private String membrane = null;
    
    
// 细胞核
    private String nucleus = null;
    
    
public Cell clone() throws CloneNotSupportedException {
        
return (Cell)super.clone();
    }

客户端调用:
public class PrototypeClient {

    
public static void main(String[] args) throws CloneNotSupportedException {
        
// 产生细胞A
        Cell cellA = new Cell("细胞壁""细胞膜""细胞核");

        
/* 产生与A同样的细胞B  */
        Cell cellB 
= cellA.clone();
        
        System.out.println(cellA 
== cellB);
    }

}
上述程序运行的结果为false,说明clone()在内存区开辟了另一块引用。以上的clone方法也被称为“浅度拷贝”,关于深度拷贝这里就不做详说了。

在一个复杂的类层次当中,当系统必须从其中的许多类型创建新对象时,可以考虑原型。

posted on 2009-03-03 08:19 永远的火焰舞者 阅读(169) 评论(0)  编辑  收藏 所属分类: designing pattern


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(1)

随笔分类(10)

随笔档案(9)

文章档案(1)

搜索

最新评论

  • 1. re: JForum安装
  • 我就是想研究下sso,哈哈!再在JForum的基础上二次开发玩玩 呵呵
  • --Jlg
  • 2. re: JForum安装
  • JForum的代码还比较清晰,但谈不上强大,虽然一般也足够用了。
  • --一农

阅读排行榜

评论排行榜