zoukankan      html  css  js  c++  java
  • java设计模式实战--原型管理器及其应用

      原型管理器是对原型的管理类,可以添加原型对象,也可以获得原型对象。

    下面开始实战,便于理解原型管理器中的克隆模式(本次讲的是浅克隆)。

    比如每个学校招生,学校为每个学生建立信息档案,每个学生为一个对象。这些信息档案部分信息是相同的,这时就可以将这些相同的信息通过一个对象克隆到其他对象,

    剩下的不同信息再通过单独输入。这样便节省很大的精力与时间。具体代码如下:

    1.prototypeManger原型类

    package com.Mark.chapter05.originalClass.applicationTemplate;
    
    import java.util.Hashtable;
    
    public class prototypeManger
    {
        //定义一个哈希表,存储原型对象
        private Hashtable ht=new Hashtable();
        private static prototypeManger pm=new prototypeManger();
    //    往哈希表里存值
        public void addPrototype(String key,Object obj)
        {
            ht.put(key,obj);
        }
    //    取值
        public Object getPrototype(String key)
        {
            return ht.get(key);
        }
    //    新建prototypeManger对象  饿汉 单例模式
        public static prototypeManger getProtoType()
        {
            return pm;
        }
    }

    2Student.类 与 pubInfo 公共信息类

     1 package com.Mark.chapter05.originalClass.applicationTemplate;
     2 
     3 public class Student implements Cloneable
     4 {
     5     String name;
     6     int age;
     7     PubInfo info;//公共信息,一般公共信息是克隆的
     8 
     9     public PubInfo getInfo()
    10     {
    11         return info;
    12     }
    13     public void setInfo(PubInfo info)
    14     {
    15         this.info = info;
    16     }
    17 
    18     public String getName()
    19     {
    20         return name;
    21     }
    22     public int getAge()
    23     {
    24         return age;
    25     }
    26     public void setName(String name)
    27     {
    28         this.name = name;
    29     }
    30     public void setAge(int age)
    31     {
    32         this.age = age;
    33     }
    34     @Override
    35     protected Object clone() throws CloneNotSupportedException
    36     {
    37         return super.clone();
    38     }
    39 }
    40 
    41 
    42 class PubInfo
    43 {
    44     String college;
    45     String city;
    46     String zip;
    47     public PubInfo(String college,String city,String zip)
    48     {
    49         this.college=college;
    50         this.city=city;
    51         this.zip=zip;
    52     }
    53     public String getCollege()
    54     {
    55         return college;
    56     }
    57     public void setCollege(String college)
    58     {
    59         this.college = college;
    60     }
    61     public String getCity()
    62     {
    63         return city;
    64     }
    65     public String getZip()
    66     {
    67         return zip;
    68     }
    69     public void setZip(String zip)
    70     {
    71         this.zip = zip;
    72     }
    73     public void setCity(String city)
    74     {
    75         this.city = city;
    76     }
    77 
    78     @Override
    79     protected Object clone() throws CloneNotSupportedException
    80     {
    81         return super.clone();
    82     }
    83 }

    3.Test测试类

     1 package com.Mark.chapter05.originalClass.applicationTemplate;
     2 
     3 
     4 import java.util.Scanner;
     5 import java.util.Vector;
     6 
     7 public class Test
     8 {
     9     public static void main(String[] args) throws CloneNotSupportedException
    10     {
    11         int m=10,n=10;
    12         prototypeManger pm=new prototypeManger();
    13         PubInfo p=new PubInfo("金科","南京","223800");
    14         Student s=new Student();    //创建金科学生原型对象
    15         s.setInfo(p);
    16         pm.addPrototype("金科",s);//加入原型管理器
    17         PubInfo p2=new PubInfo("晓庄","南京","123456");
    18         Student s2= new Student();
    19         s2.setInfo(p2);
    20         pm.addPrototype("晓庄",s2);//加入原型管理器
    21 
    22         Scanner sc=new Scanner(System.in);
    23         Vector<Student> vec=new Vector<>();//创建金科学生集合
    24         Student t=(Student)pm.getPrototype("金科");//获取原型对象
    25         for (int i=0;i<m;i++)
    26         {
    27             Student st=(Student)t.clone();//浅复制创建学生对象
    28             st.setName(sc.nextLine());//输入姓名
    29             st.setAge(sc.nextInt());//输入年龄
    30             vec.add(st);
    31 //            至此,相同的公共信息自动完成(通过克隆),不同的就通过挨个输入
    32 //            使用原型管理器就是为了生产更多的原型类。
    33         }
    34 //        下面一个晓庄学生与上相同,就不用写了。
    35     }
    36 }
  • 相关阅读:
    path.join()和path.resolve()
    __dirname和__filename
    使用css-loader
    博客主题
    Python使用pandas库读取txt文件中的Json数据,并导出到csv文件
    为什么一个星期工作量的工作,我做了一个多月,还没结束 (基于socket的分布式数据处理程序Java版)
    Docker 命令
    Python使用pandas库读取csv文件,并分组统计的一个例子
    Linux 进程守护脚本
    Linux 安装 JDK
  • 原文地址:https://www.cnblogs.com/Mark-blog/p/8603707.html
Copyright © 2011-2022 走看看