小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

好程序員Java教程分享Java之設(shè)計(jì)模式

 好程序員IT 2019-12-12

好程序員Java實(shí)用教程之設(shè)計(jì)模式,首先來講一下單例設(shè)計(jì)模式

點(diǎn)擊添加圖片描述(最多60個(gè)字)

單例設(shè)計(jì)模式

/*

* 設(shè)計(jì)模式:前人總結(jié)出來的對一些常見問題的解決方案,后人直接拿來使用.

* 常用的設(shè)計(jì)模式:單例,工廠,代理,適配器,裝飾,模板,觀察者等,一共有23種

* 單例:一個(gè)類只允許有一個(gè)對象,建立一個(gè)全局的訪問點(diǎn),提供出去供大家使用.

*

* 分析:

* 1.我們肯定要建立一個(gè)單例類來描述

* 2.只允許有一個(gè)對象

* 3.全局的訪問點(diǎn):說的就是當(dāng)前的s----通過static實(shí)現(xiàn)的

* 4.提供出去

* 5.給大家使用

*

* 分類:

* 餓漢式:在定義當(dāng)前單例類對象成員變量時(shí)直接初始化.

* 懶漢式:什么時(shí)候用什么時(shí)候賦值(在公共方法中進(jìn)行賦值)

*

* 作用:

* 1.傳值

* 2.作為全局的訪問點(diǎn).

*

*使用單例傳值的好處:

* * 好處:可以讓兩個(gè)對象在完全沒有關(guān)系的前提下,實(shí)現(xiàn)值的傳遞,降低了耦合性,提高了內(nèi)聚性

*

* 耦合性,內(nèi)聚性在微觀上說:描述的是類與類之間的關(guān)系

* 好處:我們應(yīng)該盡量提高內(nèi)聚性,減少耦合性,可以提高程序的健壯性,增加代碼的可移植性,方便實(shí)現(xiàn)模塊兒化編程

*

* 如何做到低耦合高內(nèi)聚?

* 在處理類與類關(guān)系的時(shí)候,讓類之間的關(guān)系越緊密耦合性越高,內(nèi)聚性越低.反之,關(guān)系越松散耦合性越低,內(nèi)聚性越高.

*/

工廠設(shè)計(jì)模式

簡單工廠模式是屬于創(chuàng)建型模式,又叫做靜態(tài)工廠方法(Static Factory Method)模式,但不屬于23種GOF設(shè)計(jì)模式之一。簡單工廠模式是由一個(gè)工廠對象決定創(chuàng)建出哪一種產(chǎn)品類的實(shí)例。簡單工廠模式是工廠模式家族中最簡單實(shí)用的模式,可以理解為是不同工廠模式的一個(gè)特殊實(shí)現(xiàn)。

Lambda表達(dá)式

Lambda表達(dá)式是Java8之后的新特性

Lambda表達(dá)式是函數(shù)式編程

Java-->面向?qū)ο笳Z言 block代碼塊(閉包) 函數(shù)式編程(接近于面向過程) --> 面向?qū)ο?/p>

什么是函數(shù)式編程?函數(shù)式編程(英語:functional programming)或稱函數(shù)程序設(shè)計(jì),

又稱泛函編程,是一種編程范型,它將電腦運(yùn)算視為數(shù)學(xué)上的函數(shù)(cos sin tan)計(jì)算,

并且避免使用程序狀態(tài)以及易變對象。函數(shù)編程語言最重要的基礎(chǔ)是λ演算(lambda calculus)。

而且λ演算的函數(shù)可以接受函數(shù)當(dāng)作輸入(引數(shù))和輸出(傳出值)。

ps:λ這個(gè)符號可以在搜狗輸入法的符號中顯示

而在面向?qū)ο缶幊讨?,面向?qū)ο蟪绦蛟O(shè)計(jì)(英語:Object-oriented programming,縮寫:OOP)

是種具有對象概念的程序編程范型,同時(shí)也是一種程序開發(fā)的方法。它可能包含數(shù)據(jù)、屬性、代碼與方法。

對象則指的是類的實(shí)例。它將對象作為程序的基本單元,將程序和數(shù)據(jù)封裝其中,以提高軟件的重用性、

靈活性和擴(kuò)展性,對象里的程序可以訪問及經(jīng)常修改對象相關(guān)連的數(shù)據(jù)。在面向?qū)ο蟪绦蚓幊汤铮?/p>

計(jì)算機(jī)程序會(huì)被設(shè)計(jì)成彼此相關(guān)的對象。

Lambda表達(dá)式能干什么

將接口的實(shí)現(xiàn)方式重匿名內(nèi)部類的形式簡化為了一個(gè)函數(shù)式表達(dá)式方式

簡化接口實(shí)現(xiàn)

語法:

(形參參數(shù)) -> 表達(dá)式 或{方法體};

ps:

Lambds表達(dá)式就是實(shí)現(xiàn)了當(dāng)前接口中的方法及簡

void show();

() -> {System.out.println("我是Lambda表達(dá)式")};

1.形參列表

形參列表允許省略參數(shù)類型,若形參列表中只有一個(gè)參數(shù),形參列表的原括號也可以省略

ps:形參列表 對應(yīng)的是 接口中所需要實(shí)現(xiàn)方法的 形參列表

void show(int a, int b);

void display(int c);

(int a,int b) -> {實(shí)現(xiàn)};

(int a) -> {實(shí)現(xiàn)};

a -> {實(shí)現(xiàn)};

2.箭頭(->)

必須是英文狀態(tài)下的符號 減號(-) + 大于號(>) 指向?qū)崿F(xiàn)代碼塊

3.代碼塊:

若代碼塊只包含一條語句,Lambda表達(dá)式允許允許省略花括號

若Lambda表達(dá)式中只有一條return,可以省略return關(guān)鍵字

若Lambda表達(dá)式中有多條語句(實(shí)現(xiàn)方法的邏輯)不能省略大括號

ps:Java中Lambda表達(dá)式的結(jié)合需要和接口完成

Stream API --> 流式編程

看Lambda包Test類

Lambda表達(dá)式還能作為參數(shù)傳遞

看Lambda包TestDemo類

ps:Java8中若這個(gè)接口需要使Lambda表達(dá)式實(shí)現(xiàn)此時(shí)我們需要在這個(gè)接口上提供一個(gè)注解

@FunctionalInteFace

Lambda表達(dá)式引用全局變量和局部變量

看Lambda包TestDemo2類

Lambda式表達(dá)式引用構(gòu)造方法和方法引用

1.引用類方法

在函數(shù)式接口中定義的抽象方法,而方法的實(shí)現(xiàn)是觸發(fā)某個(gè)類方法實(shí)現(xiàn)此時(shí)我們就可以通過 :: 形式完成

看Lambda包TestDemo3

2.引用實(shí)例方法(成員方法)

在函數(shù)式接口中定義的抽象方法,而方法的實(shí)現(xiàn)是通過觸發(fā)某類類創(chuàng)建的來完成時(shí)我們就可以 通過 :: 形式完成

看Lambda包TestDemo4;

版本二:

在函數(shù)式接口中定義的抽象方法,而方法上的實(shí)現(xiàn)是通過抽象方法中特定的對象參數(shù)來完成我們可以通過 :: 形式完成

不過 :: 之前是當(dāng)前對象的數(shù)據(jù)了類型,而非 new出一個(gè)對象

看Lambda包TestDemo5;

3.引用構(gòu)造方法

在函數(shù)式接口中定義的抽閑方法,而該方法的實(shí)現(xiàn)是通通過new 來創(chuàng)建對象,此時(shí)我們就可以使用 :: 形式來完成

ps:固定形式 構(gòu)建對象的類型 :: new;

看Lambda包TestDemo6;

總結(jié):

在上面兩個(gè)案例中使用到了一個(gè)全新的形式 類或(對象) :: 靜態(tài)方法/成員方法

若在Lambda表達(dá)式中引用了靜態(tài)方法或成員方法時(shí) 只有一句話 ,可以使用 :: 形式進(jìn)行簡化

:: 之前 是這個(gè)方法主要的調(diào)用發(fā)起者 類/對象

:: 之后 靜態(tài)方法/成員方法

ps:一定要主要 方法后面千萬不要傳入?yún)?shù)

調(diào)用方法的參數(shù),會(huì)通過接口中方法的參數(shù)進(jìn)行傳遞

Lambda表達(dá)式和匿名內(nèi)部類的區(qū)別

1.匿名內(nèi)部類可以為任意接口創(chuàng)建對象,不管接口中包含多少個(gè)抽象方法,只要匿名內(nèi)部類實(shí)現(xiàn)所有方法即可

但是Lambda表達(dá)式只能為函數(shù)式接口創(chuàng)建對象(只能實(shí)現(xiàn)一個(gè)抽象方法)

2.匿名內(nèi)部類可以為抽象類甚至是普通類創(chuàng)建對象

但是Lambda表達(dá)式只能為函數(shù)接口創(chuàng)建對象

3.匿名內(nèi)內(nèi)部類實(shí)現(xiàn)的抽象方法方法體允許調(diào)用接口定義默認(rèn)(default)方法

但是Lambda表達(dá)式的實(shí)現(xiàn)是不允許調(diào)用默認(rèn)方法的

Lambda的實(shí)際引用

看Lambda包TestDemo7;

ps:

1.需要記住形式為了Scala做準(zhǔn)備

2.Lambda可以替換匿名內(nèi)部類一次實(shí)現(xiàn)的方式

Lambda只能實(shí)現(xiàn)接口中一個(gè)抽方法.

模板設(shè)計(jì)模式

/*

* 模板設(shè)計(jì)模式:我們在實(shí)現(xiàn)一個(gè)功能的時(shí)候,功能分成兩部分,一部分是確定的,一部分是不確定的.將確定的部分交給當(dāng)前類實(shí)現(xiàn)

* 將不確定的部分交給子類實(shí)現(xiàn).子類實(shí)現(xiàn)的結(jié)果又會(huì)反過來影響確定部分的功能.

*

* 實(shí)例:計(jì)算一個(gè)功能的耗時(shí)

* 分析:固定的功能:開始時(shí)間,結(jié)束時(shí)間

* 不固定的功能:程序運(yùn)行的時(shí)間

*/

內(nèi)部類

/*

* 內(nèi)部類:定義在A類里面的B類就是內(nèi)部類,內(nèi)部類的地位與A類的成員變量,成員方法平等,內(nèi)部類也可以看做是A類的成員,成員之間可以相互調(diào)用

作用:我們可以通過內(nèi)部類讓java間接實(shí)現(xiàn)多繼承

*/

/*

* 局部內(nèi)部類:定義在一個(gè)類方法中的類

* 作用范圍:從定義開始到當(dāng)前的方法結(jié)束

*/

/*

* 靜態(tài)內(nèi)部類:內(nèi)部類的類型是static類型的.

注意:靜態(tài)內(nèi)部類不一定有靜態(tài)方法,有靜態(tài)方法的一定是靜態(tài)內(nèi)部類

*/

/*

* 匿名內(nèi)部類(對象):定義在一個(gè)類方法中的匿名子類對象,屬于局部內(nèi)部類

* 匿名子類對象:

* 匿名內(nèi)部類對象:

*

* 創(chuàng)建匿名內(nèi)部類對象注意點(diǎn):1.匿名內(nèi)部類對象必須有父類或者父接口

*

匿名內(nèi)部類對象的作用:

* 1.當(dāng)只用到當(dāng)前子類的一個(gè)實(shí)例對象的時(shí)候,定義好馬上使用

* 2.當(dāng)不好起名字的時(shí)候

* 3.可以更好的定義運(yùn)行時(shí)的回調(diào)(知道即可)

*

* 內(nèi)部類的作用:

* 1.間接實(shí)現(xiàn)了多繼承

* 2.方便定義

* 3.只有外部類可以訪問創(chuàng)建的內(nèi)部類的屬性和方法,包括私有方法

* 4.同一個(gè)包中其他的類不可見,有了很好的封裝性

*/

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多