久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx

Java進階高手讀書筆記1-行為參數(shù)化-創(chuàng)新互聯(lián)

閱讀完《Java進階高手》第一章以及第二章;對書中知識進行復盤整理;主要記錄:通過行為參數(shù)化傳遞代碼

成都創(chuàng)新互聯(lián)是一家專業(yè)的成都網(wǎng)站建設公司,我們專注成都網(wǎng)站設計、成都做網(wǎng)站、網(wǎng)絡營銷、企業(yè)網(wǎng)站建設,賣友情鏈接1元廣告為企業(yè)客戶提供一站式建站解決方案,能帶給客戶新的互聯(lián)網(wǎng)理念。從網(wǎng)站結構的規(guī)劃UI設計到用戶體驗提高,創(chuàng)新互聯(lián)力求做到盡善盡美。

文章目錄
  • 一、行為參數(shù)化
  • 二、具體的業(yè)務場景
    • 1.初試牛刀:篩選綠蘋果
    • 2.再展身手:把顏色作為參數(shù)
    • 3.第三次嘗試:對你能想到的每個屬性做篩選
    • 4.行為參數(shù)化


正文內容:

一、行為參數(shù)化
  • 在之前的認知概念里面,筆者對于參數(shù)的理解就是:在Java方法將要運行時,方法需要外部提供數(shù)據(jù),然后對數(shù)據(jù)進行處理,此時的這個需求數(shù)據(jù)就是參數(shù)。這種數(shù)據(jù)類型的參數(shù),可以是具體的類,也可以是具體的類屬性。從Java類角度分析,Java類包括成員變量,成員方法以及其他內容,此時的參數(shù)就是Java類中的成員變量;但是隨著業(yè)務邏輯的復雜化,需要我們處理的數(shù)據(jù)可能也是需要提前處理好才可以,簡單地說就是為了讓代碼更加貼合實際生活,更加簡潔,讓代碼具有更高的擴展性與可讀性,我們需要對代碼進行優(yōu)化處理
  • 現(xiàn)在引入行為參數(shù)化概念,行為是指Java類中的方法,將行為參數(shù)化是指我們將具體的對數(shù)據(jù)操作的業(yè)務邏輯進行抽取將其抽象為參數(shù),然后通過形參的方式傳遞給方法,讓方法具有簡潔性以及高可讀性,高擴展性
  • 行為參數(shù)化與策略模式類似,都是可以幫助開發(fā)者處理頻繁需求變更的軟件開發(fā)模式
二、具體的業(yè)務場景
  • 有個應用程序是幫助農(nóng)民了解自己的庫存。這位農(nóng)民可能想要一個查找?guī)齑嬷兴芯G色蘋果的功能。但到了第二天,他可能會告訴你:其實我還需要找出重量超過150克的蘋果。過了兩天,農(nóng)民又跑過來告訴你:要是可以找到既是綠色,重量又超過150克的蘋果那就太棒了。你要如何應對這樣的不斷變化的需求?理想狀態(tài)下應該將自己的工作量降到最小。此時,類似的新功能實現(xiàn)起來還應該很簡單,而且易于長期維護
1.初試牛刀:篩選綠蘋果

具體的代碼如下所示:

public class Apple {private Integer weight;

   private Color color;
   
   public Integer getWeight() {   return weight;
   }

   public void setWeight(Integer weight) {   this.weight = weight;
   }
   
   public Color getColor() {   return color;
   }

   public void setColor(Color color) {   this.color = color;
   }
}
enum Color {RED, GREEN
}
public class Filter {public static ListfilterGreenApple(Listinventory) {Listresult = new ArrayList<>();
        for (Apple apple : inventory) {if (GREEN.equals(apple.getColor())) {result.add(apple);
            }
        }
        return result;
    }
}

我們現(xiàn)在使用枚舉類把蘋果的顏色進行描述,然后將蘋果抽象化為Apple類,包含顏色與重量的屬性,最后構造過濾類,在過濾類里面給出具體的過濾綠色蘋果的方法filterGreenApple;如果現(xiàn)在需求變了,農(nóng)民需要過濾紅色蘋果,那么我們就需要將filterGreenApple方法復制一份,將方法名改為filterRedApple并且將里面的GREEN顏色改為RED;這個樣子確實解決了問題,但是很明顯,重復代碼很多,并不是一個好的解決方法;一個好的解決方法是我們編寫類似代碼后,盡量對其進行抽象化

2.再展身手:把顏色作為參數(shù)

在上一版代碼中,我們復制filterGreenApple方法完成對紅色蘋果的過濾,重復了filterGreenApple中大量代碼,怎樣避免這種問題的發(fā)生呢?好的解決方式是將顏色進行參數(shù)化,把顏色作為參數(shù)傳遞給過濾的方法,這樣子就靈活適應變化了

  • 在Filter類里面添加方法filterApple
    具體代碼如下:
public static ListfilterApple(Listinventory,Color color) {Listresult = new ArrayList<>();
        for (Apple apple : inventory) {if (color.equals(apple.getColor())) {result.add(apple);
            }
        }
        return result;
    }

現(xiàn)在解決了顏色篩選的問題,但是農(nóng)民又跑過來告訴你:要是可以區(qū)分蘋果的重量就太好了,重的蘋果一般是重量大于150克
對于我們來說,這不是問題,我們只需要重新寫一個過濾蘋果的方法就可以了,我們現(xiàn)在復制filterApple方法,然后把形參color改為weight,然后把篩選條件改為weight大于150就完成了
具體代碼如下所示:

public static ListfilterApple(Listinventory, Integer weight) {Listresult = new ArrayList<>();
        for (Apple apple : inventory) {if (apple.getWeight() >weight) {result.add(apple);
            }
        }
        return result;
    }
  • 現(xiàn)在雖然解決了問題,但是代碼的重復度太高了,這違反了DRY(Don’t Repeat Yourself不要重復自己)軟件工程原則

-我們可以將重量和顏色都作為參數(shù)傳遞給方法,然后給一個標記,根據(jù)標記去判斷是通過顏色還是重量過濾蘋果

3.第三次嘗試:對你能想到的每個屬性做篩選

我們將所有的蘋果屬性結合起來,如下所示:

public static ListfilterApple(Listinventory,
 Color color, Integer weight, boolean flag) {Listresult = new ArrayList<>();
        for (Apple apple : inventory) {if ((flag && color.equals(apple.getColor())) ||
             (!flag && apple.getWeight() >weight)) {result.add(apple);
            }
        }
        return result;
    }

現(xiàn)在的問題確實已經(jīng)解決了,但是這個解決方案再差不過。首先客戶端看上去糟糕透了,true和false是什么意思?此外,這個解決方案無法應對變化的需求,如果這位農(nóng)民要求你對蘋果的不同屬性進行篩選,比如,大小,產(chǎn)地,形狀等,該怎樣處理?或者農(nóng)民要求組合屬性,做更復雜的查詢,比如綠色的重蘋果,又該怎么辦?如今的情況,我們需要一種更好的解決方式來告訴過濾方法

  • 現(xiàn)在就需要使用行為參數(shù)化的方式實現(xiàn)這種靈活性
4.行為參數(shù)化

一種可能的解決方式是對我們的選擇標準進行建模:考慮的是蘋果,需要根據(jù)Apple的某些屬性(比如它是綠色的嗎?重量超過150克嗎?)來返回一個boolean值。我們把它稱為謂詞(即一個返回boolean值的函數(shù))。讓我們定義一個接口來對選擇標準建模:

public interface ApplePredicate {boolean test(Apple apple);
}

選擇蘋果的不同策略,可以將這些標準看作filter方法的不同行為。剛才做的這些和策略設計模式相關,它讓我們定義一族算法,把它們封裝起來(稱為策略),然后再運行的時候選擇一個算法。在則這里,算法族就是ApplePredicate,不同的策略就是AppleGreenColorPredicate和AppleHeavyWeightPredicate

public class AppleGreenColorPredicate implements ApplePredicate{@Override
    public boolean test(Apple apple) {return GREEN.equals(apple.getColor());
    }
}
public class AppleHeavyWeightPredicate implements ApplePredicate {@Override
    public boolean test(Apple apple) {return apple.getWeight() >150;
    }
}

但是,該怎么利用ApplePredicate的不同實現(xiàn)呢?我們需要filterApple方法接受ApplePredicate對象,對Apple做條件測試。這就是行為參數(shù)化:讓方法接受多種行為(策略)作為參數(shù),并在內部使用,來完成不同行為

  • 這在軟件工程中有很大好處:現(xiàn)在我們把filterApple方法迭代集合的邏輯與你要應用到集合中每個元素的行為區(qū)分開了

具體代碼如下:

public class Filter {public static ListfilterApple(Listinventory,ApplePredicate predicate){ArrayListresult = new ArrayList<>();
        for (Apple apple:inventory){if(predicate.test(apple)){result.add(apple);
            }
        }
        return result;
    }
}

在這個例子中,唯一重要的代碼是test方法的實現(xiàn),正是它定義了filterApple方法的新行為。但是現(xiàn)在有一個遺憾,由于filterApple方法只接受對象,所以我們必須把代碼包裹在ApplePredicate對象里。這種做法類似于內聯(lián)“傳遞代碼”,因為我們通過實現(xiàn)一個test方法來傳遞布爾表達式值。再JDK8之后我們可以使用Lambda進一步簡化代碼,這樣子我們就無須定義多個ApplePredicate實現(xiàn)類了,從而去掉不必要的代碼

具體代碼如下:

public class Main {public static void main(String[] args) {Listresult1 = Filter.filterApple(new ArrayList(), (apple) ->GREEN.equals(apple.getColor()));
        Listresult2 = Filter.filterApple(new ArrayList(), (apple) ->apple.getWeight() >150);
    }
}

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

當前名稱:Java進階高手讀書筆記1-行為參數(shù)化-創(chuàng)新互聯(lián)
當前URL:http://www.js-pz168.com/article40/ioheo.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)手機網(wǎng)站建設網(wǎng)站改版商城網(wǎng)站服務器托管網(wǎng)站維護

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx
欧美日韩国产bt| 国产日韩欧美综合在线| 亚洲国产精品国自产拍av| 一区二区免费在线播放| 久久精品国产免费看久久精品| 成人手机电影网| 久久综合中文色婷婷| 欧美三级乱人伦电影| 国产日韩精品一区二区三区在线| 亚洲成人资源在线| 成人91在线观看| 蜜桃免费网站一区二区三区| 91在线高清观看| 色噜噜狠狠色综合网| 日韩欧美123| 亚洲小说春色综合另类电影| 成人午夜激情片| 亚洲v国产v| 精品欧美久久久| 偷窥国产亚洲免费视频| 91原创在线视频| 在线中文字幕不卡| 中文字幕不卡在线观看| 久久福利视频一区二区| 精品国产乱码久久久久久郑州公司| 欧美日韩精品福利| 亚洲欧美另类久久久精品2019| 国产乱色国产精品免费视频| 欧美午夜精品久久久久久蜜| 日韩午夜小视频| 亚洲成人久久影院| 51午夜精品| 欧美性大战久久久| 亚洲人成精品久久久久| 粉嫩绯色av一区二区在线观看| 日韩三级电影网站| 国产婷婷色一区二区三区| 蜜臀久久久99精品久久久久久| 国产亚洲第一区| 欧美一级夜夜爽| 天堂一区二区在线| 国产一区二区不卡视频| 欧美一级二级三级乱码| 视频在线观看一区二区三区| 91丨九色丨黑人外教| 欧美天天综合网| 一区二区三区 在线观看视频| caoporn国产精品| 在线观看国产精品网站| 自拍偷拍欧美精品| 成人av在线网站| 欧美亚男人的天堂| 一区二区免费在线播放| 91啪亚洲精品| 7777精品伊人久久久大香线蕉完整版 | 狠狠色狠狠色综合系列| 久久国产精品一区二区三区| 欧美xxxx老人做受| 蜜臀精品久久久久久蜜臀 | 欧美韩日一区二区三区四区| 久久精品国产久精国产| 欧美一区二区福利| 国产亚洲欧美中文| 高清久久久久久| 欧美在线小视频| 亚洲国产精品久久久久秋霞影院| 国产精品二区三区| 精品欧美久久久| 国产在线播精品第三| 在线一区高清| 一区二区三区成人| 九九九九精品| 国产欧美1区2区3区| 国产69精品久久99不卡| 欧美日韩国产美| 奇米影视在线99精品| 日韩av电影免费观看| 国产精品白丝在线| 91网免费观看| 精品噜噜噜噜久久久久久久久试看| 久久精品二区亚洲w码| 伊人av成人| 亚洲一区二区三区中文字幕| 久久精品第九区免费观看| 久久久一区二区| eeuss国产一区二区三区| 欧美一区二区视频在线观看2020| 麻豆高清免费国产一区| 一区二区日本| 性感美女极品91精品| 欧美成ee人免费视频| 国产精品麻豆网站| 91九色蝌蚪成人| 久久网站热最新地址| 成人免费av网站| 欧美一区三区四区| 国产精品一区二区免费不卡 | 亚洲综合清纯丝袜自拍| 精一区二区三区| 色欧美乱欧美15图片| 日日摸夜夜添夜夜添精品视频| 性欧美videosex高清少妇| 一区二区久久久久| 97久久夜色精品国产九色| 精品电影一区二区三区| 99九九99九九九视频精品| 精品国产一区二区亚洲人成毛片| 懂色av一区二区三区免费观看| 欧美一区二区二区| 懂色av一区二区三区免费观看| 日韩视频免费观看高清完整版在线观看| 国产黄色精品视频| 欧美一区国产二区| 成人动漫在线一区| 精品1区2区在线观看| 91久久极品少妇xxxxⅹ软件| 国产三级精品三级| 久久狠狠久久综合桃花| 亚洲美女免费视频| 亚洲国产一区二区在线| 日本欧美在线观看| 欧美日韩一区 二区 三区 久久精品| 九色综合狠狠综合久久| 欧美一级日韩一级| 99精品视频一区二区三区| 国产午夜精品一区二区三区四区| 国产福利久久精品| 亚洲少妇最新在线视频| 日韩亚洲欧美精品| 蜜桃av一区二区在线观看| 欧美理论片在线| av亚洲精华国产精华精| 国产精品视频一二三区| 欧美二区在线| 三级欧美在线一区| 欧美日韩大陆一区二区| 丁香天五香天堂综合| 久久九九久精品国产免费直播| 国产尤物91| 亚洲成av人片一区二区梦乃| 欧美日韩一区三区四区| 丁香六月综合激情| 国产精品欧美极品| 无遮挡亚洲一区| 久久精品国产免费| 精品国产乱码久久久久久闺蜜| 福利精品视频| 亚洲一级二级在线| 欧美探花视频资源| 成人av影视在线观看| 国产精品乱码久久久久久| 亚洲第一综合| 国产在线精品国自产拍免费| 久久久久九九视频| 欧美主播一区二区三区美女 久久精品人| 日韩精品成人一区二区三区| 欧美二区三区91| 97神马电影| 亚洲va欧美va国产va天堂影院| 欧美日韩精品综合在线| 99久久国产免费免费| 夜夜嗨av一区二区三区四季av| 在线观看一区日韩| 99国产精品久久久久久久久久久| 亚洲色图欧美偷拍| 欧洲一区二区三区免费视频| av在线不卡电影| 一区二区三区精品视频| 欧美美女bb生活片| 国产精品久久亚洲7777| 婷婷久久综合九色综合伊人色| 日韩一级片网址| 欧美高清性xxxxhd| 黄一区二区三区| 国产精品久久久久久久第一福利 | 亚洲日本精品一区| 国产成人午夜高潮毛片| 国产精品免费视频观看| 一本高清dvd不卡在线观看| 暴力调教一区二区三区| 夜夜嗨av一区二区三区| 日韩三级免费观看| 欧美日韩精品综合| 国产精品综合av一区二区国产馆| 国产精品国产精品国产专区不片| 欧洲色大大久久| 丁香五月网久久综合| 免费成人性网站| 中文字幕+乱码+中文字幕一区| 91九色02白丝porn| 偷窥少妇高潮呻吟av久久免费| 日韩欧美国产电影| 婷婷四房综合激情五月| www.日韩在线| 爽好多水快深点欧美视频| 久久男人中文字幕资源站| 一区二区三区四区| 99精品欧美一区二区三区| 免费成人在线播放| 一色桃子久久精品亚洲|