posts - 297,  comments - 1618,  trackbacks - 0

    原型模式属于对象的创建模式
1. 定义
     用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.
2. 工作原理
      通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象请求原型对象拷贝它们自己来实施创建.
     
3. 使用方法
     Java语言的构件模型直接支持原始模型模式.所有的JavaBean都继承自java.lang.Object,而Object类提供一个clone()方法,可以将一个JavaBean对象复制一份.但是,这个JavaBean必须实现一个标识接口Cloneable,表明这个JavaBean支持复制.
4. 经典应用场景
    孙悟空在与黄风怪的战斗中,使用了一个身外身的手段,叫声"变",变出来百来个行者.这中手段在面向对象领域里就是原型模式.
    嘿嘿,我也用这种方法来“变”出几个Amigo来,嘻嘻,一个去工作,一个去谈恋爱,一个去跟朋友玩,一个去跟家人逛吧......
    看我的......

/**
 * 设计模式-原型模式
 * 
@author  Amigo Xie(xiexingxing1121@126.com)
 * 
@since  2007/03/13 22:20
 
*/

class  CloneAmigo  implements  Cloneable  {
    
/**  身高(单位:cm) */
    
private   int  height;
    
    
/**  体重(单位:kg) */
    
private   int  weight;
    
    
/**  年龄 */
    
private   int  age;

    
/**
     * 构造函数
     * 
@param  height 
     * 
@param  weight
     * 
@param  age
     
*/

    
public  CloneAmigo( int  height,  int  weight,  int  age)  {
        
this .height  =  height;
        
this .weight  =  weight;
        
this .age  =  age;  
    }

    
    
public  Object clone()  {
        
// 创建一个本类对象,并返回给调用者
 
        CloneAmigo temp  =   new  CloneAmigo(height, weight, age);
        
return (Object)temp;
    }


    
public   void  setHeight( int  height)  {    
        
this .age  =  age;
    }


    pubiic 
int  getHeight()  {
        
return  height;
    }


    
public   void  setWeight( int  weight)  {
        
this .weight  =  weight;
    }


    
public   int  getWeight()  {
        
return  weight;
    }


    
public   void  setAge( int  age)  {
        
this .age  =  age;
    }


    
public   void  getAge()  {
        
return  age;
    }


}

    测试类的代码如下:

public   class   Client  {
    
public   static   void  main(String[] args)  {
        CloneAmigo amigo1 
=   new  CloneAmigo (1584524);
        
//通过对一个Amigo进行克隆得到第二个Amigo
        CloneAmigo amigo2 = (CloneAmigo ) amigo1.clone();
        System.out.println(
"第一个Amigo的身高: " + amigo1.getHeight());
        System.out.println(
"第二个Amigo的身高: " + amigo2.getHeight());

        System.out.println(
"第一个Amigo的体重: " + amigo1.getWeight());
        System.out.println(
"第二个Amigo的体重: " + amigo2.getWeight());

        System.out.println(
"第一个Amigo的年龄: " + amigo1.getAge());
        System.out.println(
"第二个Amigo的年龄: " + amigo2.getAge());
    }

}

      从运行结果可看出两个Amigo的身高、体重、年龄都是一样的。
5. 重点关注----克隆满足的条件
     
1)克隆的对象与原对象不是同一个对象;
      2)克隆对象与原对象的类型一样;
      3)如果对象x的equals()方法定义恰当的话,那么x.clone().equals(x)应当是成立的。

参考书籍:《Java与模式》
                    《Patterns in Java》
posted on 2007-03-13 23:20 阿蜜果 阅读(3104) 评论(6)  编辑  收藏 所属分类: Design Pattern


FeedBack:
# fiaxqqfo
2007-03-13 23:35 | fiaxqqfo
[URL=http://ximiqfkw.com]nncsodro[/URL] fqahexya http://bfrjeiou.com rfcdyasm btzsbmxa <a href="http://flqngefl.com">dhmiotcj</a>   回复  更多评论
  
# re: 设计模式学习笔记--原型(Prototype)
2007-03-14 00:19 | popo
写的很不错,能否交换个blog链接?嘿嘿  回复  更多评论
  
# re: 设计模式学习笔记--原型(Prototype)[未登录]
2007-03-14 08:45 | 阿蜜果
好噢,嘻嘻  回复  更多评论
  
# re: 设计模式学习笔记--原型(Prototype)[未登录]
# re: 设计模式学习笔记--原型(Prototype)
2007-03-14 08:57 | Tortoise
好东西!!  回复  更多评论
  
# re: 设计模式学习笔记--原型(Prototype)[未登录]
2007-03-19 00:35 | TonySoft
学以至用  回复  更多评论
  

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


网站导航:
 
<2007年3月>
25262728123
45678910
11121314151617
18192021222324
25262728293031
1234567

      生活将我们磨圆,是为了让我们滚得更远——“圆”来如此。
      我的作品:
      玩转Axure RP  (2015年12月出版)
      

      Power Designer系统分析与建模实战  (2015年7月出版)
      
     Struts2+Hibernate3+Spring2   (2010年5月出版)
     

留言簿(262)

随笔分类

随笔档案

文章分类

相册

关注blog

积分与排名

  • 积分 - 2284416
  • 排名 - 3

最新评论

阅读排行榜

评论排行榜