国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

創(chuàng)造型模式-原型模式(場(chǎng)景體驗(yàn)-》方案解決===代碼圖解)

這篇具有很好參考價(jià)值的文章主要介紹了創(chuàng)造型模式-原型模式(場(chǎng)景體驗(yàn)-》方案解決===代碼圖解)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

創(chuàng)建重復(fù)對(duì)象-場(chǎng)景體驗(yàn)

??今天來一個(gè)大客戶,他要求幫他下100個(gè)訂單。每個(gè)訂單除了用戶ID,和用戶名不同之外,其他個(gè)人信息完全相同。

訂單類
public class Order{
	//id 主鍵,無實(shí)際意義
	private String id;
	//訂單編號(hào)
	private String orderNo;
	//產(chǎn)品編碼
	private String productNo;
	//產(chǎn)品名稱
	private String productName;
	//產(chǎn)品類型
	private String productType;
	//訂單購(gòu)買數(shù)量
	private Integer num;
	//用戶id
	private String userId;
	//用戶名稱
	private String userName;
	//用戶電話號(hào)碼
	private String tel;
	//用戶住址
	private String address;
	//購(gòu)買店鋪,用于識(shí)別改訂單是在哪一個(gè)店鋪下的單。
	private Store store;
}
//商店類
public class Store{
	//店鋪id
	private String id;
	//店鋪名稱
	private String name;
	//店鋪負(fù)責(zé)人
	private String head;
	//店鋪地址
	private Strign address;
}

制造數(shù)據(jù):

public void copyOrder(){
	//專賣店
	Store store = new Store();
	store.setId("dp001");
	store.setName("地球村專賣店");
	store.setHead("村長(zhǎng)");
	store.setAddress("東風(fēng)東街001號(hào)");
	
	//第一個(gè)訂單
	Order order = new Order();
	order.setId("111111");
	order.setOrderNo("dd001");
	order.setProductNo("cp001");
	order.setProductName("產(chǎn)品1");
	order.setProductType("工具類");
	order.setNum(50);
	order.setUserId("U001");
	order.setUserName("用戶1");
	order.setTel("17660887362");
	order.setAddress("地球村-種花家");
	order.setStore(store);
	//第二個(gè)訂單
	Order order1 = new Order();
	order.setId("111112");
	order.setOrderNo("dd002");
	order.setProductNo(order.getProductNo());
	order.setProductName(order.getProductName());
	order.setProductType(order.getProductType());
	order.setNum(order.getNum());
	order.setUserId("U002");
	order.setUserName("用戶2");
	order.setTel(order.getTel());
	order.setAddress(order.getAddress());
	order.setStore(store);
	...
	還要100個(gè)
}

??上面的代碼就是現(xiàn)狀,當(dāng)然也可以使用構(gòu)造方法,但是過程都是一樣的需要大量重復(fù)的代碼。非常不美觀。

解決方案(原型模式)

原型模式可以理解為:將一個(gè)完整對(duì)象的復(fù)制創(chuàng)建過程抽離成一個(gè)方法,使我們要?jiǎng)?chuàng)建一個(gè)相同對(duì)象的時(shí)候不需要再依次賦值。
模擬底層實(shí)現(xiàn):

public class Order{
	//id 主鍵,無實(shí)際意義
	private String id;
	//訂單編號(hào)
	private String orderNo;
	//產(chǎn)品編碼
	private String productNo;
	//產(chǎn)品名稱
	private String productName;
	//產(chǎn)品類型
	private String productType;
	//訂單購(gòu)買數(shù)量
	private Integer num;
	//用戶id
	private String userId;
	//用戶名稱
	private String userName;
	//用戶電話號(hào)碼
	private String tel;
	//用戶住址
	private String address;
	//購(gòu)買店鋪,用于識(shí)別改訂單是在哪一個(gè)店鋪下的單。
	private Store store;
	public Order clone(){
        Order order1 = new Order();
        order1.setId(this.id);
        order1.setOrderNo(this.orderNo);
        order1.setProductNo(this.productNo);
        order1.setProductName(this.productName);
        order1.setProductType(this.productType);
        order1.setNum(this.num);
        order1.setUserId(this.userId);
        order1.setUserName(this.userName);
        order1.setTel(this.tel);
        order1.setAddress(this.address);
        order1.setStore(this.store);
        return order1;
    }
	
}

我們使用的時(shí)候:


public void copyOrder(){
	//專賣店
	Store store = new Store();
	store.setId("dp001");
	store.setName("地球村專賣店");
	store.setHead("村長(zhǎng)");
	store.setAddress("東風(fēng)東街001號(hào)");

	//第一個(gè)訂單
	Order order = new Order();
	order.setId("111111");
	order.setOrderNo("dd001");
	order.setProductNo("cp001");
	order.setProductName("產(chǎn)品1");
	order.setProductType("工具類");
	order.setNum(50);
	order.setUserId("U001");
	order.setUserName("用戶1");
	order.setTel("17660887362");
	order.setAddress("地球村-種花家");
	order.setStore(store);
	//第二個(gè)訂單
	Order order1 = order.clone();
	order.setId("111112");
	order.setOrderNo("dd002");
	order.setUserId("U002");
	order.setUserName("用戶2");
	...
	之后的100個(gè)相同
}

通過上述方法使原本賦值操作的工作量大量減少,只需要關(guān)注自己個(gè)性化的賦值即可。
上面的clone方法是完全我自己寫的用來模擬的,Java為我們提供了更好的實(shí)現(xiàn),不需要我們?nèi)プ錾厦鏌o聊的賦值工作:
只需要Order類實(shí)現(xiàn)Cloneable接口,重寫clone方法,在這個(gè)方法里面調(diào)用supper.clone()方法就好了。

public class Order{
	//id 主鍵,無實(shí)際意義
	private String id;
	//訂單編號(hào)
	private String orderNo;
	//產(chǎn)品編碼
	private String productNo;
	//產(chǎn)品名稱
	private String productName;
	//產(chǎn)品類型
	private String productType;
	//訂單購(gòu)買數(shù)量
	private Integer num;
	//用戶id
	private String userId;
	//用戶名稱
	private String userName;
	//用戶電話號(hào)碼
	private String tel;
	//用戶住址
	private String address;
	//購(gòu)買店鋪,用于識(shí)別改訂單是在哪一個(gè)店鋪下的單。
	private Store store;
	@Override
    public Order clone(){
        Order order1 = new Order();
        try {
            order1 = (Order) super.clone();
        }catch (Exception e){
            System.out.println(e.getMessage());
        }
        return order1;
    }
}

??有興趣的未來大佬們可以去看一下clone的源碼,這里用的super.clone()是Object中的clone方法。這個(gè)方法是native的方法(本地方法)。Java中,用native關(guān)鍵字修飾的函數(shù)表明該方法的實(shí)現(xiàn)并不是在Java中去完成,而是由C/C++去完成,并被編譯成了.dll,由Java去調(diào)用。方法的具體實(shí)現(xiàn)體在dll文件中,對(duì)于不同平臺(tái),其具體實(shí)現(xiàn)應(yīng)該有所不同。用native修飾,即表示操作系統(tǒng),需要提供此方法,Java本身需要使用。
??clone主要做的就是開創(chuàng)新的空間,將原對(duì)象的數(shù)據(jù)復(fù)制過去,再給返回引用。在Java里面所有的類如果重寫clone方法就都是個(gè)性化的處理了。但是需要注意的是這個(gè)native的clone是淺拷貝。也就是在對(duì)象中還有對(duì)象的話,內(nèi)部的對(duì)象clone之后還是原來的對(duì)象。

以咱們的代碼舉例:
??在Order類中有一個(gè)屬性是Store的實(shí)例。在上面的clone執(zhí)行之后如果改變clone之后的實(shí)例中的store屬性,原本的order中的store屬性也會(huì)改變。
在上面“copyOrder”代碼的最后一行增加如下:

		System.out.println("order2"+order1);
        System.out.println("order:"+order);
        System.out.println("改變前order1:"+order1.getStore());
        System.out.println("改變前order:"+order.getStore());
        order1.getStore().setAddress("地球村-鷹醬家門頭房");
        System.out.println("改變后order1:"+order1.getStore());
        System.out.println("改變前order:"+order.getStore());

創(chuàng)造型模式-原型模式(場(chǎng)景體驗(yàn)-》方案解決===代碼圖解),# 設(shè)計(jì)模式,原型模式,java,開發(fā)語言
可以看到,我們只改變了order1實(shí)例中store的address屬性,但是order的對(duì)應(yīng)屬性也跟著一起變了。

如何解決上面的淺拷貝?

原型模式定義

??原型模式(Prototype Pattern)用于創(chuàng)建重復(fù)的對(duì)象,同時(shí)又能保證性能。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式之一。

??這種模式是實(shí)現(xiàn)了一個(gè)原型接口,該接口用于創(chuàng)建當(dāng)前對(duì)象的克隆。當(dāng)直接創(chuàng)建對(duì)象的代價(jià)比較大時(shí),則采用這種模式。例如,一個(gè)對(duì)象需要在一個(gè)高代價(jià)的數(shù)據(jù)庫操作之后被創(chuàng)建。我們可以緩存該對(duì)象,在下一個(gè)請(qǐng)求時(shí)返回它的克隆,在需要的時(shí)候更新數(shù)據(jù)庫,以此來減少數(shù)據(jù)庫調(diào)用。

定義是引用自:菜鳥教程-原型模式文章來源地址http://www.zghlxwxcb.cn/news/detail-606284.html

到了這里,關(guān)于創(chuàng)造型模式-原型模式(場(chǎng)景體驗(yàn)-》方案解決===代碼圖解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 前端用戶體驗(yàn)設(shè)計(jì):創(chuàng)造卓越的用戶界面和交互

    前端用戶體驗(yàn)設(shè)計(jì):創(chuàng)造卓越的用戶界面和交互

    ?? 個(gè)人網(wǎng)站:【工具大全】【游戲大全】【神級(jí)源碼資源網(wǎng)】 ?? 前端學(xué)習(xí)課程:??【28個(gè)案例趣學(xué)前端】【400個(gè)JS面試題】 ?? 尋找學(xué)習(xí)交流、摸魚劃水的小伙伴,請(qǐng)點(diǎn)擊【摸魚學(xué)習(xí)交流群】 用戶體驗(yàn)(User Experience,UX)是前端開發(fā)中至關(guān)重要的一環(huán)。一個(gè)優(yōu)秀的用戶體驗(yàn)

    2024年02月04日
    瀏覽(17)
  • ??創(chuàng)意網(wǎng)頁:創(chuàng)造精彩的登錄體驗(yàn)-3D翻轉(zhuǎn)登錄頁面

    ??創(chuàng)意網(wǎng)頁:創(chuàng)造精彩的登錄體驗(yàn)-3D翻轉(zhuǎn)登錄頁面

    ? 博主: 命運(yùn)之光 ? ?? 專欄: Python星辰秘典 ?? 專欄: web開發(fā)(簡(jiǎn)單好用又好看) ?? 專欄: Java經(jīng)典程序設(shè)計(jì) ?? 博主的其他文章: 點(diǎn)擊進(jìn)入博主的主頁 前言: 歡迎踏入我的Web項(xiàng)目專欄,一段神奇而令人陶醉的數(shù)字世界! ?? 在這里,我將帶您穿越時(shí)空,揭開屬于

    2024年02月16日
    瀏覽(50)
  • FluentFTP實(shí)戰(zhàn):輕松操控FTP文件,創(chuàng)造高效傳輸體驗(yàn)

    FluentFTP實(shí)戰(zhàn):輕松操控FTP文件,創(chuàng)造高效傳輸體驗(yàn)

    ? 概述: 通過FluentFTP庫,輕松在.NET中實(shí)現(xiàn)FTP功能。支持判斷、創(chuàng)建、刪除文件夾,判斷文件是否存在,實(shí)現(xiàn)上傳、下載和刪除文件。簡(jiǎn)便而強(qiáng)大的FTP操作,提升文件傳輸效率。 在.NET中,使用FluentFTP庫可以方便地實(shí)現(xiàn)FTP的相關(guān)功能。以下是判斷文件夾是否存在、文件夾的創(chuàng)建

    2024年02月19日
    瀏覽(17)
  • Web3區(qū)塊鏈游戲:創(chuàng)造虛擬世界的全新體驗(yàn)

    Web3區(qū)塊鏈游戲:創(chuàng)造虛擬世界的全新體驗(yàn)

    隨著區(qū)塊鏈技術(shù)的不斷發(fā)展,Web3區(qū)塊鏈游戲正逐漸嶄露頭角,為玩家?guī)砹巳碌奶摂M世界體驗(yàn)。傳統(tǒng)游戲中的中心化結(jié)構(gòu)和封閉經(jīng)濟(jì)體系已經(jīng)被打破,取而代之的是去中心化的游戲環(huán)境和真實(shí)所有權(quán)的數(shù)字資產(chǎn)。本文將深入探討Web3區(qū)塊鏈游戲的特點(diǎn)、優(yōu)勢(shì)以及對(duì)玩家和游

    2024年02月21日
    瀏覽(36)
  • 動(dòng)態(tài)貼紙、美顏SDK與AR:創(chuàng)造獨(dú)特的互動(dòng)體驗(yàn)

    動(dòng)態(tài)貼紙、美顏SDK與AR:創(chuàng)造獨(dú)特的互動(dòng)體驗(yàn)

    目前,動(dòng)態(tài)貼紙、美顏SDK、增強(qiáng)現(xiàn)實(shí)(AR)等技術(shù)是比較熱門的話題,它們所結(jié)合的新興玩法更是收到大家推崇,正潛移默化的改變我們與數(shù)字世界互動(dòng)的方式。 一、動(dòng)態(tài)貼紙:個(gè)性化互動(dòng)的開始 動(dòng)態(tài)貼紙,可以在實(shí)時(shí)視頻或照片中添加虛擬元素,如面具、耳朵、花朵等。這

    2024年02月09日
    瀏覽(18)
  • 全球網(wǎng)友元宵一起創(chuàng)作賞月圖,體驗(yàn)百度文心大模型AIGC創(chuàng)造力

    全球網(wǎng)友元宵一起創(chuàng)作賞月圖,體驗(yàn)百度文心大模型AIGC創(chuàng)造力

    2月15日元宵節(jié),在共青團(tuán)中央宣傳部、國(guó)家航天局探月與航天工程中心指導(dǎo)下,中國(guó)青年報(bào)社聯(lián)合百度共同推出“天下共元宵”線上互動(dòng)活動(dòng)?;?dòng)以“嫦娥一號(hào)”傳回的首張全月影像圖為原型,使用AI生成個(gè)性化畫作,讓千萬網(wǎng)友首次直觀體驗(yàn)到百度文心大模型的AIGC(AI

    2024年02月12日
    瀏覽(18)
  • “優(yōu)化”城市出行體驗(yàn)——山海鯨智慧交通解決方案

    “優(yōu)化”城市出行體驗(yàn)——山海鯨智慧交通解決方案

    隨著城市化進(jìn)程的不斷加速,城市交通問題也變得日益嚴(yán)重。為了改善城市交通體驗(yàn)、提高出行效率以及減少交通擁堵和環(huán)境污染。 山海鯨可視化 打造城市智慧交通系列解決方案模板,解決方案以“ 數(shù)字 孿生 技術(shù) ”為核心,通過數(shù)據(jù)分析、人工智能和物聯(lián)網(wǎng)技術(shù)來優(yōu)化城

    2024年02月07日
    瀏覽(19)
  • 音視頻解決方案(一):秀場(chǎng)直播場(chǎng)景化方案

    秀場(chǎng)直播場(chǎng)景為社交娛樂模式下的視頻互動(dòng)場(chǎng)景,場(chǎng)景支持多人視頻連麥互動(dòng),更容易吸引用戶參與連麥互動(dòng),提升用戶的消費(fèi)意愿及粘性。 產(chǎn)品功能目前是推流到 ZEGO 音視頻云服務(wù),觀眾再?gòu)?ZEGO 音視頻云服務(wù)進(jìn)行拉流,同時(shí)主播與觀眾之間連麥也是通過 ZEGO 音視頻云服務(wù)

    2024年02月01日
    瀏覽(18)
  • 音視頻解決方案(一):在線KTV場(chǎng)景方案

    音視頻解決方案(一):在線KTV場(chǎng)景方案

    在線 KTV 是社交娛樂場(chǎng)景下的新型互動(dòng)玩法,通過歌曲把人與人連接起來,讓溝通破冰變得更簡(jiǎn)單,有效提升平臺(tái)用戶停留時(shí)長(zhǎng)。 在線 KTV 玩法有很多種,按照形式主要由以下幾種: 排麥獨(dú)唱:觀眾上麥后可以進(jìn)行點(diǎn)歌排麥等待,歌曲開始播放后即可進(jìn)行獨(dú)唱。 實(shí)時(shí)合唱:兩

    2024年01月24日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包