1.適配器設計模式
設計模式:就是解決問題的方案。遇到相同問題按照這種設計模式思想實現即可。在java中有23種設計模式。
適配器設計模式:adapter 我們電腦的電源。 起到一個轉換作用。
package com.itheima.sh.adapter_01;
public interface Inter {
//定義抽象方法
void show1();
void show2();
void show3();
void show4();
}
package com.itheima.sh.adapter_01;
/*
適配器類:最好是抽象類,防止創建Adapter類的對象。
在 java中一個抽象類中是可以沒有抽象方法的
*/
public abstract class Adapter implements Inter {
@Override
public void show1() {
}
@Override
public void show2() {
}
@Override
public void show3() {
}
@Override
public void show4() {
}
}
package com.itheima.sh.adapter_01;
/*
需求:我想在實現類InterImpl2只實現show1和show3方法
*/
public class InterImpl2 extends Adapter {
@Override
public void show1() {
System.out.println("show1....");
}
@Override
public void show3() {
System.out.println("show3....");
}
}
package com.itheima.sh.adapter_01;
/*
ctrl+o :重寫父類的所有方法
ctrl+i:重寫父類或者父接口中的抽象方法
需求:我想在實現類InterImpl只實現show1和show3方法,對於接口
Inter中的其他方法我們不想實現,怎麼辦?
我們可以使用適配器設計模式的思想來實現:
如果一個接口中含有多個接口,而對於某個實現類只想實現部分接口,此時
我們可以在定義一箇中間類(適配器類)來實現該接口,然後在適配器類中
實現接口中的所有方法,並且在適配器類中的所有方法的方法體不用書寫任何內容,
讓某個類來繼承這個適配器類即可,對於適配器的子類想用哪個方法直接重寫哪個方法
*/
public class InterImpl implements Inter {
@Override
public void show1() {
}
@Override
public void show2() {
}
@Override
public void show3() {
}
@Override
public void show4() {
}
}
測試類:
package com.itheima.sh.adapter_01;
public class Test01 {
public static void main(String[] args) {
//創建子類對象
InterImpl2 ip = new InterImpl2();
ip.show1();
ip.show3();
}
}
小結:
1.適配器設計模式:定義一個適配器類實現某個接口實現該接口中的所有的抽象方法,然後讓其他具體某個類來繼承適配器類繼承,想用哪個方法直接重寫哪個方法。
2.適配器類屬於抽象類
ctrl+o :重寫父類的所有方法
ctrl+i:重寫父類或者父接口中的抽象方法
2.bt面試題
package com.itheima.sh.face_to_face_02;
public class Demo2 {
public static int k = 0;
public static Demo2 t1 = new Demo2("t1");
public static Demo2 t2 = new Demo2("t2");
public static int i = print("i");
public static int j = print("j");
public static int n = 99;
{
print("constructor code");
}
static {
print("static code");
}
public static int print(String s) {
System.out.println("i="+i +" "+s+ " k=" + k + " n=" + n + " j=" + j);
++i;
++k;
++n;
return i;
}
public Demo2(String string) {
print(string);
}
//Demo2.main(new String[0]) 底層調用main方法
public static void main(String[] args) {
Demo2 d=new Demo2("T");
}
}
3.二進制和十進制之間的轉換
計算機中的數據不同於人們生活中的數據,人們生活採用十進制數,而計算機中全部採用二進制數表示,它只包含0、1兩個數,逢二進一,1+1=10。每一個0或者每一個1,叫做一個bit(比特)。
下面瞭解一下十進制和二進制數據之間的轉換計算。
-
**十進制數據轉成二進制數據:**使用短除法。使用短除法對2整除,取餘數,一直除到商爲0時,倒着獲取所有的餘數。然後將獲取的餘數按獲取的順序組合到一起。使用除以2獲取餘數的方式,
注意:獲取餘數是從下往上倒着獲取。
- **二進制數據轉成十進制數據:**使用乘法,從右邊開始當前位數的數字乘以2的(位數-1)次方(次冪),然後將各個相乘的數相加的結果就是當前2進制轉化爲十進制的結果。
- **簡化版方式解決十進制和二進制之間的轉換:**使用8421編碼的方式
小貼士:
二進制數系統中,每個0或1就是一個位,叫做bit(比特)。
計算機底層都是二進制:0 1