中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

國內攝影作品網(wǎng)站免費建網(wǎng)站的步驟

國內攝影作品網(wǎng)站,免費建網(wǎng)站的步驟,網(wǎng)頁設計心得體會500,怎么讓網(wǎng)站被百度搜到Java8實戰(zhàn)-總結33 重構、測試和調試使用 Lambda 重構面向對象的設計模式策略模式模板方法 重構、測試和調試 使用 Lambda 重構面向對象的設計模式 新的語言特性常常讓現(xiàn)存的編程模式或設計黯然失色。比如, Java 5中引入了for-each循環(huán),由于它的穩(wěn)健性和…

Java8實戰(zhàn)-總結33

  • 重構、測試和調試
    • 使用 Lambda 重構面向對象的設計模式
      • 策略模式
      • 模板方法

重構、測試和調試

使用 Lambda 重構面向對象的設計模式

新的語言特性常常讓現(xiàn)存的編程模式或設計黯然失色。比如, Java 5中引入了for-each循環(huán),由于它的穩(wěn)健性和簡潔性,已經(jīng)替代了很多顯式使用迭代器的情形。Java 7中推出的菱形操作符(<>)讓大家在創(chuàng)建實例時無需顯式使用泛型,一定程度上推動了Java程序員們采用類型接口(type interface)進行程序設計。

對設計經(jīng)驗的歸納總結被稱為設計模式。設計軟件時,可以復用這些方式方法來解決一些常見問題。這看起來像傳統(tǒng)建筑工程師的工作方式,對典型的場景(比如懸掛橋、拱橋等)都定義有可重用的解決方案。例如,訪問者模式常用于分離程序的算法和它的操作對象。單例模式一般用于限制類的實例化,僅生成一份對象。

Lambda表達式為程序員的工具箱又新添了一件利器。它們?yōu)榻鉀Q傳統(tǒng)設計模式所面對的問題提供了新的解決方案,不但如此,采用這些方案往往更高效、更簡單。使用Lambda表達式后,很多現(xiàn)存的略顯臃腫的面向對象設計模式能夠用更精簡的方式實現(xiàn)了。下面會針對五個設計模式展開討論,分別是:

  • 策略模式
  • 模板方法
  • 觀察者模式
  • 責任鏈模式
  • 工廠模式

策略模式

策略模式代表了解決一類算法的通用解決方案,可以在運行時選擇使用哪種方案。例如使用不同的條件(比如蘋果的重量,或者顏色)來篩選庫存中的蘋果??梢詫⑦@一模式應用到更廣泛的領域,比如使用不同的標準來驗證輸入的有效性,使用不同的方式來分析或者格式化輸入。
策略模式包含三部分內容:

  • 一個代表某個算法的接口(它是策略模式的接口)。
  • 一個或多個該接口的具體實現(xiàn),它們代表了算法的多種實現(xiàn)(比如,實體類ConcreteStrategyA或者ConcreteStrategyB)。
  • 一個或多個使用策略對象的客戶。
    在這里插入圖片描述
    假設希望驗證輸入的內容是否根據(jù)標準進行了恰當?shù)母袷交?#xff08;比如只包含小寫字母或數(shù)字)??梢詮亩x一個驗證文本(以String的形式表示)的接口入手:
public interface ValidationStrategy { boolean execute(String s); 
} 

其次,定義了該接口的一個或多個具體實現(xiàn):

public class IsAllLowerCase implements ValidationStrategy { public boolean execute(String s) { return s.matches("[a-z]+"); } 
} 
public class IsNumeric implements ValidationStrategy { public boolean execute(String s) { return s.matches("\\d+"); } 
} 

之后,就可以在程序中使用這些略有差異的驗證策略了:

public class Validator { private final ValidationStrategy strategy; public Validator(ValidationStrategy v) { this.strategy = v;} public boolean validate(String s) { return strategy.execute(s); } 
} Validator numericValidator = new Validator(new IsNumeric()); 
boolean b1 = numericValidator.validate("aaaa");  //返回false
Validator lowerCaseValidator = new Validator(new IsAllLowerCase()); 
boolean b2 = lowerCaseValidator.validate("bbbb");  //返回true

使用Lambda表達式
ValidationStrategy是一個函數(shù)接口(除此之外,它還與Predicate<String>具有同樣的函數(shù)描述)。這意味著不需要聲明新的類來實現(xiàn)不同的策略,通過直接傳遞Lambda表達式就能達到同樣的目的,并且還更簡潔:

Validator numericValidator = new Validator((String s) -> s.matches("[a-z]+")); 
boolean b1 = numericValidator.validate("aaaa");  //直接傳遞Lambda表達式
Validator lowerCaseValidator = new Validator((String s) -> s.matches("\\d+"));  //直接傳遞Lambda表達式
boolean b2 = lowerCaseValidator.validate("bbbb"); 

Lambda表達式避免了采用策略設計模式時僵化的模板代碼。如果仔細分析一下個中緣由,會發(fā)現(xiàn),Lambda表達式實際已經(jīng)對部分代碼(或策略)進行了封裝,而這就是創(chuàng)建策略設計模式的初衷。因此,建議對類似的問題,應該盡量使用Lambda表達式來解決。

模板方法

如果需要采用某個算法的框架,同時又希望有一定的靈活度,能對它的某些部分進行改進,那么采用模板方法設計模式是比較通用的方案。換句話說,模板方法模式在你“希望使用這個算法,但是需要對其中的某些行進行改進,才能達到希望的效果”時是非常有用的。

從一個例子著手,看看這個模式是如何工作的。假設需要編寫一個簡單的在線銀行應用。通常,用戶需要輸入一個用戶賬戶,之后應用才能從銀行的數(shù)據(jù)庫中得到用戶的詳細信息,最終完成一些讓用戶滿意的操作。不同分行的在線銀行應用讓客戶滿意的方式可能還略有不同,比如給客戶的賬戶發(fā)放紅利,或者僅僅是少發(fā)送一些推廣文件??赡芡ㄟ^下面的抽象類方式來實現(xiàn)在線銀行應用:

abstract class OnlineBanking { public void processCustomer(int id){ Customer c = Database.getCustomerWithId(id); makeCustomerHappy(c); }abstract void makeCustomerHappy(Customer c); 
} 

processCustomer方法搭建了在線銀行算法的框架:獲取客戶提供的ID,然后提供服務讓用戶滿意。不同的支行可以通過繼承OnlineBanking類,對該方法提供差異化的實現(xiàn)。

使用Lambda表達式
使用Lambda表達式同樣也可以解決這些問題(創(chuàng)建算法框架,讓具體的實現(xiàn)插入某些部分)。你想要插入的不同算法組件可以通過Lambda表達式或者方法引用的方式實現(xiàn)。

這里向processCustomer方法引入了第二個參數(shù),它是一個Consumer<Customer>類型的參數(shù),與前文定義的makeCustomerHappy的特征保持一致:

public void processCustomer(int id, Consumer<Customer> makeCustomerHappy) { Customer c = Database.getCustomerWithId(id); makeCustomerHappy.accept(c); 
} 

現(xiàn)在,可以很方便地通過傳遞Lambda表達式,直接插入不同的行為,不再需要繼承OnlineBanking類了:

new OnlineBankingLambda().processCustomer(1337, (Customer c) -> System.out.println("Hello " + c.getName()); 
http://www.risenshineclean.com/news/30521.html

相關文章:

  • 東莞網(wǎng)站優(yōu)化中易品牌推廣渠道有哪些
  • 做的網(wǎng)站怎么讓百度收索時搜seo實戰(zhàn)指導
  • 嵐山網(wǎng)站建設報價山東網(wǎng)絡推廣網(wǎng)站
  • iis2008如何做網(wǎng)站百度知道合伙人
  • 徐州萬網(wǎng)網(wǎng)站建設seo優(yōu)化上首頁
  • 利用云服務器做網(wǎng)站谷歌推廣哪家好
  • 企業(yè)咨詢管理有限公司南昌seo全網(wǎng)營銷
  • 免費網(wǎng)站后臺管理系統(tǒng)看廣告收益最高的軟件
  • 濟南做外貿網(wǎng)站新冠咳嗽怎么辦
  • 網(wǎng)站怎樣做友情鏈接佛山本地網(wǎng)站建設
  • 網(wǎng)站開發(fā)看書湖北網(wǎng)站seo
  • 做動漫網(wǎng)站侵權嗎揚州網(wǎng)絡優(yōu)化推廣
  • 怎么通過微博做網(wǎng)站外鏈百度seo外包
  • wordpress游戲網(wǎng)站百度優(yōu)化推廣
  • 做網(wǎng)站賭博的推廣是不是犯罪的上海全網(wǎng)推廣
  • 公司網(wǎng)站 域名網(wǎng)絡營銷成功案例有哪些
  • 商業(yè)網(wǎng)站建設的方法外國網(wǎng)站怎么進入
  • 做圖素材網(wǎng)站開哪個vip好熱搜榜上2023年熱門話題
  • 怎么在外管局的網(wǎng)站做延期seo服務價格表
  • 怎樣做_網(wǎng)站做seo百度網(wǎng)站的域名地址
  • 3d做號網(wǎng)站每日精選12條新聞
  • 設計前沿的網(wǎng)站東莞網(wǎng)站關鍵詞優(yōu)化公司
  • 做社群的網(wǎng)站有哪些西安百度推廣怎么做
  • wordpress html插件優(yōu)化網(wǎng)站做什么的
  • 哪家公司做網(wǎng)站最好網(wǎng)絡營銷專業(yè)技能
  • 明年做那些網(wǎng)站致富網(wǎng)站優(yōu)化包括哪些
  • 無極網(wǎng)站站怎么有的下不了如何讓百度收錄自己信息
  • 新都網(wǎng)站開發(fā)鄭州百度網(wǎng)站優(yōu)化排名
  • 營銷網(wǎng)站的搭建磁力兔子
  • 類似非小號的網(wǎng)站怎么做軟文推廣一般發(fā)布在哪些平臺