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

軟件設(shè)計模式之原型模式

這篇具有很好參考價值的文章主要介紹了軟件設(shè)計模式之原型模式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一.定義

原型模式(Prototype Pattern)的簡單程度僅次于單例模式和迭代器模式。正是由于簡單,使用的場景才非常地多,其定義如下:
Specify the kinds of objects to create using a prototypical instance, and create new objects by copyingthis prototype.(用原型實例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象。)

實際的類圖模板如下:
軟件設(shè)計模式之原型模式
原型模式的通用源碼如下:
軟件設(shè)計模式之原型模式

實現(xiàn)一個接口,然后重寫clone方法,就完成了原型模式!

二.例子

用一個個性化服務(wù)賬單,來說明什么是原型模式,看一則小故事.
現(xiàn)在電子賬單越來越流行了,比如你的信用卡,每到月初的時候銀行就會發(fā)–份電子郵件給你,說你這個月消費了多少,什么時候消費的,積分是多少等,這是每個月發(fā)一次。還有一種也是銀行發(fā)的郵件你肯定非常有印象:廣告信,現(xiàn)在各大銀行的信用卡部門都在拉攏客戶,電子郵件是一種廉價、快捷的通信方式,你用紙質(zhì)的廣告信那個費用多高呀,比如我行今天推出一個信用卡刷卡抽獎活動,通過電子賬單系統(tǒng)可以一個晚上發(fā)送給600萬客戶,為什么要用電子賬單系統(tǒng)呢?直接找個發(fā)垃圾郵件的工具不就解決問題了嗎?是個好主意,但是這個方案在金融行業(yè)是行不通的,為什么?因為銀行發(fā)送該類郵件是有要求的:

  • 個性化服務(wù)
    一般銀行都要求個性化服務(wù),發(fā)過去的郵件上總有一些個人信息吧,比如“XX先生”,“XX女士”等。
  • 遞送成功率
    郵件的遞送成功率有一定的要求,由于大批量地發(fā)送郵件會被接收方郵件服務(wù)器誤認(rèn)是垃圾郵件,因此在郵件頭要增加一些偽造數(shù)據(jù),以規(guī)避被反垃圾郵件引擎誤認(rèn)為是垃圾郵件。

從這兩方面考慮廣告信的發(fā)送也是電子賬單系統(tǒng)(電子賬單系統(tǒng)一般包括:賬單分析、賬單生成器、廣告信管理、發(fā)送隊列管理、發(fā)送機(jī)、退信處理、報表管理等)的一個子功能,我們今天就來考慮一下廣告信這個模塊是怎么開發(fā)的。那既然是廣告信,肯定需要一個模版,然后再從數(shù)據(jù)庫中把客戶的信息一個一個地取出,放到模板中生成一份完整的郵件,然后扔給發(fā)送機(jī)進(jìn)行發(fā)送處理,類圖如圖所示
軟件設(shè)計模式之原型模式
廣告模板代碼
軟件設(shè)計模式之原型模式
郵件類代碼
軟件設(shè)計模式之原型模式
軟件設(shè)計模式之原型模式
Mail類就是一個業(yè)務(wù)對象,雖然比較長,還是比較簡單的。我們再來看業(yè)務(wù)場景類是如何對郵件繼續(xù)處理的,代碼如下:
軟件設(shè)計模式之原型模式
軟件設(shè)計模式之原型模式

由于是隨機(jī)數(shù),每次運行都有所差異,不管怎么樣,我們這個電子賬單發(fā)送程序是編寫出來了,也能正常發(fā)送。我們再來仔細(xì)地想想,這個程序是否有問題?Look here,這是一個線程在運行,也就是你發(fā)送的是單線程的,那按照一封郵件發(fā)出去需要0.02秒(夠小了,你還要到數(shù)據(jù)庫中取數(shù)據(jù)呢),600萬封郵件需要33個小時,也就是一個整天都發(fā)送不完,今天的不發(fā)送完,明天的賬單又產(chǎn)生了,日積月累,激起甲方人員一堆抱怨,那怎么辦?
好辦,把sendMail修改為多線程,但是只把sendMail修改為多線程還是有問題的呀,產(chǎn)生第一封郵件對象,放到線程1中運行,還沒有發(fā)送出去,線程2也啟動了,直接就把郵件對象mail的收件人地址和稱謂修改掉了,線程不安全了。說到這里,你會說這有N多種解決辦法,其中一種是使用一種新型模式來解決這個問題:通過對象的復(fù)制功能來解決這個問題,類圖稍作修改,如圖所示
軟件設(shè)計模式之原型模式

修改后的郵件類
軟件設(shè)計模式之原型模式
軟件設(shè)計模式之原型模式
修改后的場景類
軟件設(shè)計模式之原型模式

運行結(jié)果不變,一樣完成了電子廣告信的發(fā)送功能,而且sendMail即使是多線程也沒有關(guān)系。注意,看Client類中的粗體字mail.clone()這個方法,把對象復(fù)制一份,產(chǎn)生一個新的對象,和原有對象一樣,然后再修改細(xì)節(jié)的數(shù)據(jù),如設(shè)置稱謂、設(shè)置收件人地址等。這種不通過new關(guān)鍵字來產(chǎn)生一個對象,而是通過對象復(fù)制來實現(xiàn)的模式就叫做原型模式。

三.結(jié)論

優(yōu)點

  • 性能優(yōu)良
    原型模式是在內(nèi)存二進(jìn)制流的拷貝,要比直接new一個對象性能好很多,特別是要在一個循環(huán)體內(nèi)產(chǎn)生大量的對象時,原型模式可以更好地體現(xiàn)其優(yōu)點。
  • 逃避構(gòu)造函數(shù)的約束
    這既是它的優(yōu)點也是缺點,直接在內(nèi)存中拷貝,構(gòu)造函數(shù)是不會執(zhí)行的,優(yōu)點就是減少了約束,缺點也是減少了約束,需要大家在實際應(yīng)用時考慮。

使用場景

  • 資源優(yōu)化場景
    類初始化需要消化非常多的資源,這個資源包括數(shù)據(jù)、硬件資源等。
  • 性能和安全要求的場景
    通過new產(chǎn)生一個對象需要非常繁瑣的數(shù)據(jù)準(zhǔn)備或訪問權(quán)限,則可以使用原型模式。
  • 一個對象多個修改者的場景
    一個對象需要提供給其他對象訪問,而且各個調(diào)用者可能都需要修改其值時,可以考慮使用原型模式拷貝多個對象供調(diào)用者使用。

在實際項目中,原型模式很少單獨出現(xiàn),一般是和工廠方法模式一起出現(xiàn),通過clone的方法創(chuàng)建一個對象,然后由工廠方法提供給調(diào)用者。原型模式已經(jīng)與Java融為一體,大家可以隨手拿來使用。文章來源地址http://www.zghlxwxcb.cn/news/detail-492177.html

到了這里,關(guān)于軟件設(shè)計模式之原型模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

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

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

    目錄 一、傳統(tǒng)方式 二、原型模式 ?三、淺拷貝和深拷貝 克隆羊問題: 現(xiàn)在有一只羊tom,姓名為: tom,年齡為: 1,顏色為: 白色,請編寫程序創(chuàng)建和tom羊?qū)傩酝耆嗤?0只羊。 傳統(tǒng)的方式的優(yōu)缺點: 簡單易操作。優(yōu)點是比較好理解。 在創(chuàng)建新的對象時,總是需要重新獲取原

    2024年02月16日
    瀏覽(23)
  • 設(shè)計模式5:原型模式

    Prototype Pattern 如果對象的創(chuàng)建成本比較大,可以基于已有的原型對象通過來創(chuàng)建新的對象,節(jié)省創(chuàng)建時間。 設(shè)計模式之原型模式 實現(xiàn)Cloneable接口的方式。這里就不展開分析淺克隆和深克隆了,后面再專門分析淺克隆和深克隆,不影響對原型模式的理解。 用序列化實現(xiàn)創(chuàng)建對

    2024年02月11日
    瀏覽(22)
  • 設(shè)計模式 - 原型模式

    傳統(tǒng)方式 優(yōu)點: 比較好理解,簡單易操作 缺點: 在創(chuàng)建新的對象時,總是需要重新獲取原始對象的屬性,如果創(chuàng)建的對象比較復(fù)雜 時,效率較低 總是需要重新初始化對象,而不是動態(tài)地獲得對象運行時的狀態(tài), 不夠靈活 原型模式 基本介紹: 原型模式(Prototype模式)是指:用原型

    2024年02月06日
    瀏覽(25)
  • 【設(shè)計模式】原型模式

    【設(shè)計模式】原型模式

    原型模式(Prototype Pattern)是用于創(chuàng)建重復(fù)的對象,同時又能保證性能。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式之一。 這種模式是實現(xiàn)了一個原型接口,該接口用于創(chuàng)建當(dāng)前對象的克隆。當(dāng)直接創(chuàng)建對象的代價比較大時,則采用這種模式。例

    2024年02月13日
    瀏覽(17)
  • 設(shè)計模式-原型模式詳解

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

    簡介設(shè)計模式 設(shè)計模式是在軟件開發(fā)中常見問題的解決方案,它們是經(jīng)過實踐和經(jīng)驗總結(jié)出來的可重用的設(shè)計思想和解決方案。設(shè)計模式通過提供通用的架構(gòu)、原則和指導(dǎo),幫助開發(fā)人員更有效地編寫高質(zhì)量的代碼。 設(shè)計模式分為三個主要類別: 創(chuàng)建型模式:關(guān)注對象的創(chuàng)

    2024年02月10日
    瀏覽(25)
  • 設(shè)計模式三(原型模式)

    在開發(fā)過程中,創(chuàng)建多個數(shù)據(jù)相同的對象,每次new都開銷比較大,在這里可以使用對象克隆,以先創(chuàng)建的原型對象為模板進(jìn)行對象的復(fù)制。這種模式是實現(xiàn)了一個原型接口,該接口用于創(chuàng)建當(dāng)前對象的克隆。當(dāng)直接創(chuàng)建對象的代價比較大時,則采用這種模式。例如,一個對象

    2024年01月25日
    瀏覽(18)
  • 設(shè)計模式(6)原型模式

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

    一、介紹 Java中自帶的原型模式是clone()方法。該方法是Object的方法,native類型。他的作用就是將對象的在內(nèi)存的那一塊內(nèi)存數(shù)據(jù)一字不差地再復(fù)制一個。我們寫簡單類的時候只需要實現(xiàn)Cloneable接口,然后調(diào)用Object::clone方法就可實現(xiàn)克隆功能。這樣實現(xiàn)的方式是淺拷貝。 ?1、

    2024年02月12日
    瀏覽(25)
  • 重溫設(shè)計模式 --- 原型模式

    原型模式 是一種創(chuàng)建型設(shè)計模式,它允許我們創(chuàng)建一個對象的副本,而不需要顯式地使用構(gòu)造函數(shù)來創(chuàng)建一個新的對象。這種模式通常用于創(chuàng)建那些具有復(fù)雜創(chuàng)建過程或需要大量資源的對象。 在原型模式中,我們首先定義一個原型接口,該接口包含一個克隆方法。然后我們

    2024年02月13日
    瀏覽(19)
  • 設(shè)計模式系列-原型模式

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

    一、上篇回顧 上篇創(chuàng)建者模式中,我們主要講述了創(chuàng)建者的幾類實現(xiàn)方案,和創(chuàng)建者模式的應(yīng)用的場景和特點,創(chuàng)建者模式適合創(chuàng)建復(fù)雜的對象,并且這些對象的每 個組成部分的詳細(xì)創(chuàng)建步驟可以是動態(tài)的變化的,但是每個對象的組裝的過程來說可能是相對固定的或者說是

    2024年02月09日
    瀏覽(16)
  • 設(shè)計模式之原型模式筆記

    設(shè)計模式之原型模式筆記

    記錄下學(xué)習(xí)設(shè)計模式-原型模式的寫法。 意圖 :用原型實例指定創(chuàng)建對象的種類,并且通過復(fù)制這些原型創(chuàng)建新的對象。 結(jié)構(gòu) : 其中: Prototype聲明一個復(fù)制自身的接口。 ConcretePrototype實現(xiàn)一個復(fù)制自身的操作。 Client讓一個原型復(fù)制自身從而創(chuàng)建一個新的對象。 適用性: 當(dāng)一個

    2024年02月10日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包