<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Swing


    天行健 君子以自強不息

    posts - 69, comments - 215, trackbacks - 0, articles - 16
       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    設計模式:創建模式之Prototype(原型)

    Posted on 2007-05-29 15:43 zht 閱讀(959) 評論(0)  編輯  收藏 所屬分類: 設計模式

    復制產生對象實例:
    使用Prototype模式可以理解為  創造出一個和已有對象一樣的對象
    ex)指著面包店櫥窗里的面包告訴老板 我就要這個 雖然不知道名字 也不知道做法 但是能買到和所指的相同的東西。
    實例:
    1、定義一個接口 實現Cloneable
    public interface Product extends Cloneable {
        public abstract void use(String s);
        public abstract Product createClone();
    }
    2、聲明一個manage類來根據Product的createClone來進行復制
    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類的一個具體實現
    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、具體使用
         // 預備階段
            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);

            // 實現產生
            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聲明成抽象類實現Cloneable接口
    并且實現createClone方法
    這樣子類中就不用再聲明creatClone方法了 簡化了代碼

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

    主站蜘蛛池模板: 亚洲成无码人在线观看| 日韩免费一区二区三区| 人人揉揉香蕉大免费不卡| 国产免费黄色无码视频| 人成电影网在线观看免费| 无码人妻一区二区三区免费视频| 美女视频黄频a免费观看| 激情小说亚洲图片| 看全免费的一级毛片| 免费大片av手机看片高清| 免费无遮挡无码视频在线观看| 羞羞网站在线免费观看| 无码日韩人妻AV一区免费l| 国产精品亚洲片在线花蝴蝶 | 免费国产成人高清在线观看麻豆 | 久久久久国产免费| 亚欧日韩毛片在线看免费网站| 无码人妻一区二区三区免费看 | 深夜福利在线免费观看| 又大又硬又粗又黄的视频免费看| sss日本免费完整版在线观看| 国产高清视频免费在线观看| 国内精品免费视频精选在线观看 | 暖暖免费中文在线日本| 国产免费区在线观看十分钟| 午夜影院免费观看| 国语成本人片免费av无码| 日韩成人免费aa在线看| 亚洲国产一区明星换脸| 亚洲成色在线综合网站| 亚洲天堂一区在线| 色天使亚洲综合一区二区| 人妻巨大乳hd免费看| 99在线视频免费| 成年女人18级毛片毛片免费观看| 国产91久久久久久久免费| 亚洲熟妇无码乱子AV电影| 91亚洲va在线天线va天堂va国产 | 亚洲人成在线影院| 亚洲午夜精品久久久久久app| 男人j进女人p免费视频|