單例設(shè)計(jì)模板
1.私有化所有的構(gòu)造方法 不讓外部自己創(chuàng)建
2.給外部提供一個(gè)靜態(tài)方法 獲取當(dāng)前類的一個(gè)對(duì)象
3.必須定義一個(gè)靜態(tài)成員變量來(lái)保存當(dāng)前類的唯一一個(gè)對(duì)象
4.創(chuàng)建對(duì)象:
餓漢式
在定義靜態(tài)成員變量時(shí),直接創(chuàng)建當(dāng)前類的一個(gè)對(duì)象 進(jìn)行賦值
private static HttpOperation instance = new HttpOperation();
餓漢式的對(duì)象不需要擔(dān)心線程問(wèn)題
懶漢式
public class HttpOperation {
private static HttpOperation instance;
private HttpOperation(){
}
public static HttpOperation getInstance(){
//判斷對(duì)象是否有值
if(instance == null) {
//加鎖
synchronized (HttpOperation.class) {
if (instance == null) {
//創(chuàng)建一個(gè)對(duì)象
instance = new HttpOperation();
}
}
}
return instance;
}
}
懶漢式相對(duì)于餓漢式更為麻煩 需要設(shè)計(jì)加鎖步驟,防止創(chuàng)建重復(fù)的對(duì)象。
抽象類實(shí)現(xiàn)模板設(shè)計(jì)模式
public abstract class Activity {
private String className;
public Activity(){
//子類必須實(shí)現(xiàn)的方法
onCreate();
//可以選擇實(shí)現(xiàn)的方法
onStart();
onResume();
onPause();
onStop();
onDestroy();
}
//界面布局
public abstract void onCreate();
//開(kāi)始啟動(dòng)
public void onStart(){
}
//界面顯示出來(lái) 可以交互了
public void onResume(){
}
//暫停
public void onPause(){
}
//已經(jīng)停止
public void onStop(){
}
//銷毀
public void onDestroy(){
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
}
模板里面定義執(zhí)行的過(guò)程 (有些功能自己可以實(shí)現(xiàn),有些必須子類實(shí)現(xiàn))
1.抽象類使用abstract修飾
2.抽象類不能被實(shí)例化 不能使用Activity ad = new Activity();
3.抽象類里面可以定義成員變量方法 抽象方法必須使用abstract修飾 而且不能實(shí)現(xiàn)只能被子類實(shí)現(xiàn)
4.子類繼承與抽象類:
子類實(shí)現(xiàn)抽象類里面的抽象方法,如果不想實(shí)現(xiàn),也可以將自己變成抽象類。
子類繼承:
public class MainActivity extends Activity {
//抽象方法必須實(shí)現(xiàn)
@Override
public void onCreate() {
System.out.println("創(chuàng)建首頁(yè)界面");
}
//子類可以重寫父類方法
@Override
public void onResume() {
System.out.println("界面啟動(dòng)了,開(kāi)始交互");
}
}