欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java設(shè)計模式之原型模式的示例詳解

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

定義

用原型實例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象 即實現(xiàn)了一個原型接口,該接口用于創(chuàng)建當(dāng)前對象的克隆,當(dā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();
    }
}

測試結(jié)果

方案二

定義照片類

/**
 * 照片類
 * @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();
    }
}

測試結(jié)果

對比分析

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

總結(jié)

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

1.當(dāng)需要一個類的大量對象的時候

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

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

相關(guān)文章

最新評論