2017-03-02學習筆記
知識點
一、static
public class Spike { public static void main(String[] args) { Counter a = new Counter(); System.out.println(a.increment()); System.out.println(a.anotherIncrement()); Counter b = new Counter(); System.out.println(b.increment()); } } class Counter { private static int count = 0; public int increment() { return count++; } public int anotherIncrement() { return ++count; } }
count是靜態變數,為所有物件所共享,因此不管a.increment()還是b.increment()都會使count持續增加。 increment()方法返回當前count值,然後count增加1 antoherIncrement()方法讓count增加1,然後返回count值 第一次a.increment()返回值為0,此時count值為1 第二次a.anotherIncrement()先讓count+1再返回,返回值為2 第三次b.increment()先返回count當前值2,然後count+1
二、AOP面向切面
AOP的概念是Aspected Oriented Programming 面向方面程式設計。
好處:AOP將程式分解成各個方面或者說關注點。這使得可以模組化,相當橫向上分切了。它可以解決OOP和過程化方法不能夠很好解決的橫切(crosscut)問題,如:事務、安全、日誌等橫切關注。
實現AOP有幾種方式:
1.Spring 1.2版本中通過ProxyFactoryBean來實現aop,即通過動態代理來實現的,Aspect必須繼承MethodBeforeAdvice,MethodAfterAdvice等
2.Spring 2.0 AOP需要改的是FBI 這個類,而且它也不需要再實現某些介面
3.三使用標註(
```html
1. 面向方面程式設計 AOP 偏重業務處理過程的某個步驟或階段,強調降低模組之間的耦合度,使程式碼擁有更好的移植性。
2. 面向物件程式設計 (oop) 則是對業務分析中抽取的實體進行方法和屬性的封裝。
```
也可以說 AOP 是面向業務中的動詞領域, OOP 面向名詞領域。 AOP 的一個很重要的特點是原始碼無關性,也就是說如果我們的系統中引用了 AOP 元件,即使我們把該元件去掉,系統程式碼也應該能夠編譯通過。要實現這一點,可以使用動態 proxy 模式。
三、jdbc橋接模式
橋接模式: 定義 :將抽象部分與它的實現部分分離,使它們都可以獨立地變化。 意圖 :將抽象與實現解耦。 橋接模式所涉及的角色
- Abstraction :定義抽象介面,擁有一個Implementor型別的物件引用
- RefinedAbstraction :擴充套件Abstraction中的介面定義
- Implementor :是具體實現的介面,Implementor和RefinedAbstraction介面並不一定完全一致,實際上這兩個介面可以完全不一樣Implementor提供具體操作方法,而Abstraction提供更高層次的呼叫
- ConcreteImplementor :實現Implementor介面,給出具體實現 Jdk中的橋接模式:JDBC JDBC連線 資料庫 的時候,在各個資料庫之間進行切換,基本不需要動太多的程式碼,甚至絲毫不動,原因就是JDBC提供了統一介面,每個資料庫提供各自的實現,用一個叫做資料庫驅動的程式來橋接就行了四、抽象類 抽象類和普通類有三點區別: 1)抽象方法必須為public和protected(因為如果為private,則不能被子類繼承,子類便無法實現該方法),預設情況下預設為public。 2)抽象類不能用來建立物件,但是它可以有構造方法,用來幫助子類例項化。 3)如果一個類繼承於一個抽象類,則子類必須實現父類的抽象方法。如果子類沒有實現父類的抽象方法,則必須將子類也定義為abstract類。五、介面 介面的主要特點 1)介面中的成員變數預設都是public、static、final型別的,必須被顯示初始化。 2)介面中的方法預設都是public、abstract型別的。 3)介面中只能包含public、static、final型別的成員變數和public、abstract型別的成員方法。 4)介面沒有構造方法,不能被例項化。 5)一個介面不能實現另一個介面,但它可以繼承多個其他介面。 6)介面必須通過類來實現它的抽象方法。 7)與子類繼承抽象父類相似,當類實現了某個介面時,它必須實現介面中所有的抽象方法,否則這個類必須被定義為抽象類。 8)一個類只能繼承一個直接的父類,但能實現多個介面。六、抽象類和介面的區別 1)抽象類可以提供成員方法的實現細節,而介面中只能存在public abstract方法; 2)抽象類中的成員變數可以是各種型別的,而介面中的成員變數只能是public static final型別的; 3)介面中不能含有靜態程式碼塊以及靜態方法,而抽象類尅有靜態程式碼塊和靜態方法; 4)一個類只能繼承一個抽象類,而一個類卻可以實現多個介面。 5)抽象類中的方法子類必須全部實現,不然子類也是抽象類,而介面中的抽象方法子類必須全部實現,是可選擇實現的。 6)抽象類是一種模板設計模式,而介面時一種行為規範。