Java原型设计模式

1、         实现需求

生成一个类对象,不是直接new 类(。。。)出来的,而是用某个类对象拷贝出来的,这种设计方式就是原型设计模式

2、         编程要点

1)     写一个类

2)     clone出来类对象

有一个问题,与原有类属性,不完全分离

3)     使用时

采一个类对象,clone出一新的对象

3、         问题分析

1)     简单拷贝出来的新类对象,新对象类属性与原类对象类性是同一个变量,这样的复制对象无意义

2)     复制出的新对象,要与原有类属性分离,这样新的类对象才有意义

4、         示例

public class MyType_1 implements Cloneable{

      String name;

      List list;

      public MyType_1() {

             Log.getLog().info("this="+this);

           

     }

      

      //下面是简单地拷贝出一个新的类对象

      @Override

     protected MyType_1 clone() throws CloneNotSupportedException {

            // TODO Auto-generated method stub

             MyType_1 obj=(MyType_1) super.clone();

            return obj;

     }

}

public class MyType_2 implements Cloneable{

    String name;

    List list;

    public MyType_2() {

       Log.getLog().info("this="+this);

     

   }

    

    @Override

   protected MyType_2 clone() throws CloneNotSupportedException {

      // TODO Auto-generated method stub

       MyType_2 obj=(MyType_2) super.clone();

       //将拷贝出来的新对象的类属性,与原有类对象的类属性分离

       obj.name=new String();

       obj.list=new ArrayList();

      return obj;

   }

 

}

public class TestPrototype {

 

   /**

    * @param args

    */

   public static void main2(String[] args)throws Exception {

      //检测原型设计模式

      MyType_1 obj1=new MyType_1();

      Log.getLog().info("obj1="+obj1);

      obj1.name="李晓华";

      List<String> list=new ArrayList();

      list.add("北京");

      list.add("上海");

      list.add("天津");

      obj1.list=list;

      MyType_1 obj2=obj1.clone();

      Log.getLog().info("obj2="+obj2);

      boolean check=obj1==obj2;

      Log.getLog().info("check="+check);

      String name2=obj2.name;

      Log.getLog().info("name2="+name2);

      List<String>list2=obj2.list;

      boolean check2=list2==list;

     

      Log.getLog().info("list2="+list2);

      Log.getLog().info("list check2="+check2);

     

 

   }

   public static void main(String[] args)throws Exception {

      //检测原型设计模式

      MyType_2 obj1=new MyType_2();

      Log.getLog().info("obj1="+obj1);

      obj1.name="李晓华";

      List<String> list=new ArrayList();

      list.add("北京");

      list.add("上海");

      list.add("天津");

      obj1.list=list;

      MyType_2 obj2=obj1.clone();

      Log.getLog().info("obj2="+obj2);

      boolean check=obj1==obj2;

      Log.getLog().info("check="+check);

      String name2=obj2.name;

      Log.getLog().info("name2="+name2);

      List<String>list2=obj2.list;

      boolean check2=list2==list;

     

      Log.getLog().info("list2="+list2);

      Log.getLog().info("list check2="+check2);

     

     

   }

 

}

猜你喜欢

转载自blog.csdn.net/qq_34520606/article/details/78660178