日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

java设计模式face_java设计模式之-------原型模式

發布時間:2023/12/4 asp.net 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java设计模式face_java设计模式之-------原型模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、模式定義

用原型實例指定要創建對象的種類,并通過拷貝這些原型創建新的對象。

二、模式場景假設

此處結合23中設計模式記憶篇作出假設,不關心邏輯是否合理。柳巖在跳舞的時候燒傷了臉,再也回不到原來的型狀。他就克隆一張臉。類圖如下:

三、代碼實現

1、創建一個類柳巖的臉

package com.pattern.prototype;

/**

* 建立一個類,代表柳巖的臉

* @author dgw

*

*/

public class LiuYanFace implements Cloneable{

//臉的顏色

private String color;

public LiuYanFace(){

//System.out.println("柳巖的臉");

}

public LiuYanFace(String color) {

super();

this.color = color;

}

public String getColor() {

return color;

}

public void setColor(String color) {

this.color = color;

}

//重新Object中的clone方法

@Override

protected LiuYanFace clone() throws CloneNotSupportedException {

return (LiuYanFace) super.clone();

}

}

2,測試代碼

package com.pattern.prototype;

import org.junit.Test;

public class TestProtoType {

@Test

public void testPrototype() throws CloneNotSupportedException{

//創建100萬對象需要 8.524s

//int i=0;

//while(i<1000000){

//LiuYanFace liuYanFace = new LiuYanFace();

//i++;

//}

//創建100萬對象需要 8.220s

//int i=0;

//LiuYanFace liuYanFace = new LiuYanFace();

//while(i<1000000){

//LiuYanFace clone = liuYanFace.clone();

//i++;

//}

}

}

3、原型模式的注意事項

1)潛克隆對應用對象不進行拷貝。

package com.pattern.prototype;

import java.util.Map;

import org.junit.Test;

public class TestProtoType {

@Test

public void testPrototype() throws CloneNotSupportedException{

//創建100萬對象需要 8.524s

//int i=0;

//while(i<1000000){

//LiuYanFace liuYanFace = new LiuYanFace();

//i++;

//}

//創建100萬對象需要 8.220s

//int i=0;

//LiuYanFace liuYanFace = new LiuYanFace();

//while(i<1000000){

//LiuYanFace clone = liuYanFace.clone();

//i++;

//}

//原型對象

LiuYanFace liuYanFace = new LiuYanFace("白的");

//克隆對象

LiuYanFace clone = liuYanFace.clone();

clone.setColor("黑的");

//原型對象的顏色

System.out.println(liuYanFace.getColor());//白的

//克隆對象的顏色

System.out.println(clone.getColor());//黑的

//克隆對象的顏色

System.out.println(liuYanFace.map);

//{prototype=白的}

System.out.println(clone.map);

//{prototype=白的}

//修改克隆對象的map中顏色

clone.map.put("prototype", "黃的");

//見鬼了嗎,怎么都改為黃色了,哈哈,這就是潛克隆。java偷懶了只克隆本對象,其對象內的數組、引用對象(String除外)都不拷貝。

System.out.println(liuYanFace.map);//黃的

System.out.println(clone.map);//黃的

}

}

2)深克隆,深拷貝。

package com.pattern.prototype;

import java.util.HashMap;

import java.util.Map;

import java.util.UUID;

/**

* 建立一個類,代表柳巖的臉

* @author dgw

*

*/

public class LiuYanFace implements Cloneable{

public Map map=new HashMap();

//臉的顏色

private String color;

public LiuYanFace(){

//System.out.println("柳巖的臉");

}

public LiuYanFace(String color) {

super();

this.color = color;

map.put("prototype", color);

}

public String getColor() {

return color;

}

public void setColor(String color) {

this.color = color;

}

//重新Object中的clone方法

@SuppressWarnings("unchecked")

@Override

protected LiuYanFace clone(){

LiuYanFace face=null;

try {

face=(LiuYanFace) super.clone();

//深度克隆

//face.map=(Map) ((HashMap) this.map).clone();

} catch (CloneNotSupportedException e) {

e.printStackTrace();

}

return face;

}

}

package com.pattern.prototype;

import java.util.Map;

import org.junit.Test;

public class TestProtoType {

@Test

public void testPrototype() throws CloneNotSupportedException{

//創建100萬對象需要 8.524s

//int i=0;

//while(i<1000000){

//LiuYanFace liuYanFace = new LiuYanFace();

//i++;

//}

//創建100萬對象需要 8.220s

//int i=0;

//LiuYanFace liuYanFace = new LiuYanFace();

//while(i<1000000){

//LiuYanFace clone = liuYanFace.clone();

//i++;

//}

//原型對象

LiuYanFace liuYanFace = new LiuYanFace("白的");

//克隆對象

LiuYanFace clone = liuYanFace.clone();

clone.setColor("黑的");

//原型對象的顏色

System.out.println(liuYanFace.getColor());//白的

//克隆對象的顏色

System.out.println(clone.getColor());//黑的

//克隆對象的顏色

System.out.println(liuYanFace.map);

//{prototype=白的}

System.out.println(clone.map);

//{prototype=白的}

//修改克隆對象的map中顏色

clone.map.put("prototype", "黃的");

System.out.println(liuYanFace.map);//白的

System.out.println(clone.map);//黃的

}

}

3)需要考培的屬性不能使用final修飾。

四、優缺點分析

優點:性能良好、在內存中二進制流的拷貝,比new性能好。

缺點:在拷貝是構造函數不會執行,減少了約束。

總結

以上是生活随笔為你收集整理的java设计模式face_java设计模式之-------原型模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。