设计模式之Prototype——作业篇  
              今年要交作业,可是由于我这几天沉迷于CS之中,到现在还没写作业,这可该怎么办呢,谁都知道我们老师最讨厌不写作业的学生了。嘿嘿,还好我有一门优秀的技能,那就是——Clone大法(俗称COPY大法),正是由于拥有该技能,才能使我残酷的斗争中立于不败之地。于是我以迅雷不及眼耳盗铃之势拿来了张三的作业,开始运功。 
            说道这里就不得不先说说什么叫Clone? 
            有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值,也就是说,A与B是两个独立的对象,但B的初始值是由A对象确定的。 
            好了言归正传,让我们开始吧。 
              
            1、在这里,先定义一个拷贝作业(CopyHomeWork)接口: 
            public interface CopyHomeWork extends Cloneable{ 
             public String getHomeWork() ; 
             public void setHomeWork(String homeWork); 
            } 
            2、再定义一个作业(HomeWork)的实现类: 
            public abstract class HomeWork implements CopyHomeWork{ 
             String homeWork; 
              
             public void setHomeWork(String homeWork) { 
             this.homeWork = homeWork; 
             } 
              
             public String getHomeWork() { 
             return this.homeWork; 
             } 
              
            // 典型的调用clone()代码 
             public Object clone() { 
             Object object = null; 
             try { 
             object = super.clone(); 
             } 
             catch (CloneNotSupportedException exception) { 
             System.err.println("*** is not Cloneable"); 
             } 
             return object; 
             } 
              
             public abstract void DoHomeWork(); //做作业的抽象类 
              
            } 
            3、定义张三的作业(ZhangSanHomeWork)类: 
            public class ZhangSanHomeWork extends HomeWork{ 
              
             public void DoHomeWork() { 
             System.out.println("张三作完了作业!"); 
             } 
              
            } 
            4、编写测试类: 
            public class TestCopyHomeWork { 
             public static void main(String args[]){ 
             ZhangSanHomeWork zhangsanHomeWork = new ZhangSanHomeWork(); 
             HomeWork myHomeWork = (HomeWork)zhangsanHomeWork.clone(); 
             
             myHomeWork.DoHomeWork(); 
             myHomeWork.setHomeWork("我正在抄作业,请勿打扰!"); 
             System.out.println(myHomeWork.getHomeWork()); 
             } 
            }  
            5、说明: 
            A:定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 
            B:Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。 
            C:Prototype模式最终演变成clone的使用。 
               
             
               
             |