設(shè)計模式-原型設(shè)計模式

1.定義

當多個地方需要修改某個對象的值或者屬性题画,而重新new會消耗大量的資源(磁盤舞箍,硬件)碎乃,這個時候可以考慮使用原型設(shè)計模式,通過拷貝對象來完成對象的復(fù)用

2.分類

淺拷貝:副本中的字段引用原始的字段(當字段是引用數(shù)據(jù)類型的時候殉簸,對拷貝的副本進行修改闰集,會同時修改原始的字段)
深拷貝:當原始字段是引用數(shù)據(jù)類型時,對該字段進行clone

3.代碼

實體類

/**
 *用戶實體類
 *@author woochen123
 *@time 2018/1/5 11:24
 *@desc
 */
public class User implements Cloneable{
    public int age;
    public String  name;
    public String phoneNum;
    public Address address;

    @Override
    protected User clone() {
        User user = null;
        try {
            user = (User) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return user;
    }
    
}

/**
 *用戶地址類
 *@author woochen123
 *@time 2018/1/5 11:24
 *@desc
 */
public class Address {
    public String city;
    public String distinct;
    public String street;

    public Address(String city, String distinct, String street) {
        this.city = city;
        this.distinct = distinct;
        this.street = street;
    }

}

操作層

/**
 *登錄接口
 *@author woochen123
 *@time 2018/1/5 11:26
 *@desc
 */
public interface Login {
    void login();
}

/**
 *登錄實體類
 *@author woochen123
 *@time 2018/1/5 11:27
 *@desc
 */
public class LoginImpl implements Login {
    @Override
    public void login() {
        //登錄到服務(wù)器獲取用戶信息
        User loginedUser = new User();
        //將服務(wù)器設(shè)置的用戶信息設(shè)置給loginedUser對象
        loginedUser.age = 24;
        loginedUser.name = "woochen123";
        loginedUser.address = new Address("浙江","杭州","西湖區(qū)");
        //將登錄用戶保存到本地緩存
        LoginSession.getLoginSession().setLoginUser(loginedUser);

    }
}

數(shù)據(jù)存儲

/**
 * 登錄緩存
 *
 * @author woochen123
 * @time 2018/1/5 11:35
 * @desc
 */
public class LoginSession {
    private static LoginSession mLoginSession;
    User user;

    public static LoginSession getLoginSession() {
        if (mLoginSession == null) {
            mLoginSession = new LoginSession();
        }
        return mLoginSession;
    }

    void setLoginUser(User user) {
        //與登錄模塊不在一個包中的類將無法調(diào)用此方法
        this.user = user;
    }

    public User getLoginUser() {
        //在外部模塊拿到的是克隆對象般卑,不會對原始用戶實體對象造成任何影響
        return user.clone();
    }

}

4.總結(jié)

  • 在進行拷貝操作的時候不會執(zhí)行類的構(gòu)造方法

5.應(yīng)用

  • 保護性拷貝(當某個對象對外需要只進行只讀性操作時武鲁,可以通過對象拷貝進行只讀的限制)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蝠检,隨后出現(xiàn)的幾起案子沐鼠,更是在濱河造成了極大的恐慌,老刑警劉巖叹谁,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饲梭,死亡現(xiàn)場離奇詭異,居然都是意外死亡焰檩,警方通過查閱死者的電腦和手機憔涉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來析苫,“玉大人兜叨,你說我怎么就攤上這事●媒模” “怎么了国旷?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長茫死。 經(jīng)常有香客問我议街,道長,這世上最難降的妖魔是什么璧榄? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任特漩,我火速辦了婚禮,結(jié)果婚禮上骨杂,老公的妹妹穿的比我還像新娘涂身。我一直安慰自己,他們只是感情好搓蚪,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布蛤售。 她就那樣靜靜地躺著,像睡著了一般妒潭。 火紅的嫁衣襯著肌膚如雪悴能。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天雳灾,我揣著相機與錄音漠酿,去河邊找鬼。 笑死谎亩,一個胖子當著我的面吹牛炒嘲,可吹牛的內(nèi)容都是我干的宇姚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼夫凸,長吁一口氣:“原來是場噩夢啊……” “哼浑劳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起夭拌,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤魔熏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鸽扁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蒜绽,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年献烦,在試婚紗的時候發(fā)現(xiàn)自己被綠了滓窍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡巩那,死狀恐怖吏夯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情即横,我是刑警寧澤噪生,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站东囚,受9級特大地震影響跺嗽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜页藻,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一桨嫁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧份帐,春花似錦璃吧、人聲如沸甥绿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽许饿。三九已至噩凹,卻和暖如春巴元,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背驮宴。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工逮刨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人幻赚。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓禀忆,卻偏偏與公主長得像臊旭,于是被迫代替她去往敵國和親落恼。 傳聞我的和親對象是個殘疾皇子箩退,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 從三月份找實習(xí)到現(xiàn)在,面了一些公司佳谦,掛了不少戴涝,但最終還是拿到小米、百度钻蔑、阿里啥刻、京東、新浪咪笑、CVTE可帽、樂視家的研發(fā)崗...
    時芥藍閱讀 42,246評論 11 349
  • 原型模式的介紹 原型模式是一個創(chuàng)建型的模式,原型二字表明了該模式應(yīng)該有一個樣板實例窗怒,用戶從這個樣板對象中復(fù)制出一個...
    Android天之驕子閱讀 353評論 0 0
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法映跟,類相關(guān)的語法,內(nèi)部類的語法扬虚,繼承相關(guān)的語法努隙,異常的語法,線程的語...
    子非魚_t_閱讀 31,631評論 18 399
  • 那年2015年 01 15應(yīng)該是我去石家莊進行藝考沖刺培訓(xùn)的前一天,第二天的出行是我自己臨時決定的堪置,當然第二天也就...
    喵兒總閱讀 215評論 0 0
  • 我不知道你們有沒有過這種感受躬存,明明那時無話不談的朋友,在多年之后終究是斷了聯(lián)系舀锨,即使你有再多的不舍岭洲,也無從找出其中...
    不停雜貨鋪閱讀 516評論 0 1