最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java設計模式之原型模式的示例詳解

 更新時間:2022年02月16日 08:36:42   作者:溫故知新之java  
原型模式(Prototype Pattern)指使用原型實例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象。本文將通過案例詳細講解一下原型模式,感興趣的可以了解一下

定義

用原型實例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象 即實現(xiàn)了一個原型接口,該接口用于創(chuàng)建當前對象的克隆,當直接創(chuàng)建對象的代價比較大時,則采用這種模式

案例

需求

張三要打印100000份照片

方案一

定義照片類

/**
 * 照片類
 * @author:liyajie
 * @createTime:2022/2/15 11:47
 * @version:1.0
 */
@Data
@AllArgsConstructor
public class Photo {
    private String name;
    private String type;
    private int size;
}

定義客戶端類

/**
 * 客戶端
 * @author:liyajie
 * @createTime:2022/2/15 11:49
 * @version:1.0
 */
public class Client {

    public void printPhoto(){
        Photo photo = new Photo("張三","彩色",2);
        for (int i = 0; i < 100000; i++) {
            Photo clone = new Photo(photo.getName(),photo.getType(),photo.getSize());
            System.out.println(clone);
        }
    }
}

定義測試類

/**
 * 測試類
 * @author:liyajie
 * @createTime:2022/2/15 11:51
 * @version:1.0
 */
public class Test {
    public static void main(String[] args) {
        Client client = new Client();
        client.printPhoto();
    }
}

測試結果

方案二

定義照片類

/**
 * 照片類
 * @author:liyajie
 * @createTime:2022/2/15 11:47
 * @version:1.0
 */
@Data
@AllArgsConstructor
public class PhotoNew implements Cloneable{
    private String name;
    private String type;
    private int size;

    @Override
    protected PhotoNew clone() {
        PhotoNew clone = null;
        try {
            clone = (PhotoNew)super.clone();
        }catch (Exception e){
            e.printStackTrace();
        }
        return clone;
    }
}

定義客戶端類

/**
 * 客戶端
 * @author:liyajie
 * @createTime:2022/2/15 11:49
 * @version:1.0
 */
public class ClientNew {

    public void printPhoto(){
        PhotoNew photoNew = new PhotoNew("張三","彩色",2);
        for (int i = 0; i < 100000; i++) {
            PhotoNew clone = photoNew.clone();
            System.out.println(clone);
        }
    }
}

定義測試類

/**
 * 測試類
 * @author:liyajie
 * @createTime:2022/2/15 11:51
 * @version:1.0
 */
public class TestNew {
    public static void main(String[] args) {
        ClientNew clientNew = new ClientNew();
        clientNew.printPhoto();
    }
}

測試結果

對比分析

  • 方案一:一般實現(xiàn)方法,使用for循環(huán)進行多次new實例化照片對象,該方案最多大的優(yōu)勢就是簡單,容易理解;劣勢就是多次使用new關鍵字,頻繁的進行內(nèi)存分配等,如果量大到一定的程度,性能會非常差
  • 方案二:原型模式實現(xiàn)方法,要實例化多次的類實現(xiàn)Cloneable,重寫clone方法,使用for循環(huán)重復調(diào)用clone方法進行多次實例化,即是在內(nèi)存中使用拷貝的方式進行創(chuàng)建對象,性能比new關鍵字會高很多

總結

通過以上兩個方案的耗時比較,我們可以發(fā)現(xiàn)使用原型模式創(chuàng)建對象性能最優(yōu),所以在以下場景中我們可以選擇使用原型模式:

1.當需要一個類的大量對象的時候

2.如果一個對象初始化太過繁瑣

到此這篇關于Java設計模式之原型模式的示例詳解的文章就介紹到這了,更多相關Java原型模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java中對象轉json字符串的三種常用方式

    java中對象轉json字符串的三種常用方式

    本文主要介紹了java中對象轉json字符串的三種常用方式,包含Jackson庫,Gson庫和Hutool工具類這三種,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • Java基本類型與byte數(shù)組之間相互轉換方法

    Java基本類型與byte數(shù)組之間相互轉換方法

    下面小編就為大家?guī)硪黄狫ava基本類型與byte數(shù)組之間相互轉換方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • Java 圖片復制功能實現(xiàn)過程解析

    Java 圖片復制功能實現(xiàn)過程解析

    這篇文章主要介紹了Java 圖片復制功能實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • 深入理解spring如何管理事務

    深入理解spring如何管理事務

    文章詳細介紹了Spring框架中的事務管理機制,包括事務的基本概念、事務管理的兩種方式、Spring事務管理的整體架構、事務配置、聲明式事務的實現(xiàn)原理、事務的關鍵流程、事務屬性與配置,以及實際開發(fā)中常見的事務問題和解決方案,感興趣的朋友一起看看吧
    2025-01-01
  • Java代碼審計之URL重定向的問題解決

    Java代碼審計之URL重定向的問題解決

    URLRedirect url重定向漏洞也稱url任意跳轉漏洞,網(wǎng)站信任了用戶的輸入導致惡意攻擊,本文主要介紹了Java代碼審計之URL重定向的問題解決,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • Spring boot集成swagger2生成接口文檔的全過程

    Spring boot集成swagger2生成接口文檔的全過程

    這篇文章主要給大家介紹了關于Spring boot集成swagger2生成接口文檔的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring boot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • java 詳解類加載器的雙親委派及打破雙親委派

    java 詳解類加載器的雙親委派及打破雙親委派

    這篇文章主要介紹了java 詳解類加載器的雙親委派及打破雙親委派的相關資料,需要的朋友可以參考下
    2017-01-01
  • Spring循環(huán)依賴代碼演示及解決方案

    Spring循環(huán)依賴代碼演示及解決方案

    這篇文章主要介紹了Spring循環(huán)依賴實現(xiàn)過程,Spring的解決循環(huán)依賴是有前置條件的,要解決循環(huán)依賴我們首先要了解Spring Bean對象的創(chuàng)建過程和依賴注入的方式
    2023-04-04
  • Eclipse下編寫java程序突然不會自動生成R.java文件和包的解決辦法

    Eclipse下編寫java程序突然不會自動生成R.java文件和包的解決辦法

    這篇文章主要介紹了Eclipse下編寫java程序突然不會自動生成R.java文件和包的解決辦法 的相關資料,需要的朋友可以參考下
    2016-01-01
  • Java?int類型如何獲取高低位

    Java?int類型如何獲取高低位

    這篇文章主要介紹了Java?int類型如何獲取高低位,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01

最新評論

成安县| 东平县| 开封县| 夏河县| 瓦房店市| 新密市| 临邑县| 响水县| 孝感市| 磐石市| 石河子市| 丁青县| 迭部县| 神农架林区| 西平县| 胶州市| 东阳市| 桦甸市| 三穗县| 安仁县| 榆社县| 衡东县| 吉林省| 阆中市| 娄烦县| 元朗区| 迭部县| 蒙城县| 卓资县| 西平县| 延安市| 义乌市| 长沙市| 甘泉县| 门源| 汉川市| 平利县| 丹阳市| 永修县| 名山县| 尼勒克县|