Swing


          天行健 君子以自強(qiáng)不息

          posts - 69, comments - 215, trackbacks - 0, articles - 16
             :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          復(fù)制產(chǎn)生對(duì)象實(shí)例:
          使用Prototype模式可以理解為  創(chuàng)造出一個(gè)和已有對(duì)象一樣的對(duì)象
          ex)指著面包店櫥窗里的面包告訴老板 我就要這個(gè) 雖然不知道名字 也不知道做法 但是能買到和所指的相同的東西。
          實(shí)例:
          1、定義一個(gè)接口 實(shí)現(xiàn)Cloneable
          public interface Product extends Cloneable {
              public abstract void use(String s);
              public abstract Product createClone();
          }
          2、聲明一個(gè)manage類來(lái)根據(jù)Product的createClone來(lái)進(jìn)行復(fù)制
          public class Manager {
                 private Hashtable showcase = new Hashtable();
              public void register(String name, Product proto) {
                  showcase.put(name, proto);
              }
              public Product create(String protoname) {
                  Product p = (Product)showcase.get(protoname);
                  return p.createClone();
              }
          }
          3、Product類的一個(gè)具體實(shí)現(xiàn)
          public class UnderlinePen implements Product {
              private char ulchar;
              public UnderlinePen(char ulchar) {
                  this.ulchar = ulchar;
              }
              public void use(String s) {
                  int length = s.getBytes().length;
                  System.out.println("\""  + s + "\"");
                  System.out.print(" ");
                  for (int i = 0; i < length; i++) {
                      System.out.print(ulchar);
                  }
                  System.out.println("");
              }
              public Product createClone() {
                  Product p = null;
                  try {
                      p = (Product)clone();
                  } catch (CloneNotSupportedException e) {
                      e.printStackTrace();
                  }
                  return p;
              }
          }
          4、具體使用
               // 預(yù)備階段
                  Manager manager = new Manager();
                  UnderlinePen upen = new UnderlinePen('~');
                  MessageBox mbox = new MessageBox('*');
                  MessageBox sbox = new MessageBox('/');
                  manager.register("strong message", upen);
                  manager.register("warning box", mbox);
                  manager.register("slash box", sbox);

                  // 實(shí)現(xiàn)產(chǎn)生
                  Product p1 = manager.create("strong message");
                  p1.use("Hello, world.");
                  Product p2 = manager.create("warning box");
                  p2.use("Hello, world.");
                  Product p3 = manager.create("slash box");
                  p3.use("Hello, world.");
              }

          也可以將product聲明成抽象類實(shí)現(xiàn)Cloneable接口
          并且實(shí)現(xiàn)createClone方法
          這樣子類中就不用再聲明creatClone方法了 簡(jiǎn)化了代碼

          clone方法在Object中定義 因此所有類都會(huì)繼承clone()方法
          Cloneable這個(gè)接口表示 可用clone()方法進(jìn)行復(fù)制
          clone()方法做的是淺拷貝 所做的操作是直接復(fù)制字段內(nèi)容 并不管該字段對(duì)應(yīng)的對(duì)象實(shí)例內(nèi)容 假定有一個(gè)數(shù)組 當(dāng)使用clone方法進(jìn)行拷貝以后 復(fù)制的結(jié)果,只是對(duì)應(yīng)到該數(shù)組的參照 即指向該數(shù)組的內(nèi)存地址 如果想做深拷貝 必須重寫clone方法 記得要加上super.clone()

          主站蜘蛛池模板: 大渡口区| 故城县| 老河口市| 锡林郭勒盟| 锦屏县| 来凤县| 潜山县| 周至县| 阿城市| 石首市| 康保县| 虎林市| 广东省| 南雄市| 寿光市| 威海市| 桐柏县| 临沂市| 广平县| 太原市| 巴中市| 海丰县| 磴口县| 宣化县| 武威市| 乐山市| 永定县| 南投县| 安塞县| 武穴市| 沈阳市| 马龙县| 江源县| 普兰县| 凤城市| 灯塔市| 安图县| 上犹县| 南昌市| 安丘市| 松滋市|