目錄
1.單例設(shè)計模式
2.抽象類Abstract模板設(shè)計模式
3.抽象類實現(xiàn)造房子
1.單例設(shè)計模式
簡介:
單例模式(Singleton Pattern)是 Java 中最簡單的設(shè)計模式之一。這種類型的設(shè)計模式屬于創(chuàng)建型模式频祝,它提供了一種創(chuàng)建對象的最佳方式泌参。
這種模式涉及到一個單一的類,該類負(fù)責(zé)創(chuàng)建自己的對象常空,同時確保只有單個對象被創(chuàng)建沽一。這個類提供了一種訪問其唯一的對象的方式,可以直接訪問漓糙,不需要實例化該類的對象铣缠。
特點:
1.私有化所有構(gòu)造方法,不讓外部自己去創(chuàng)建對象;
2.給外部提供一個方法(必須是靜態(tài)方法)獲取當(dāng)前類的一個對象;
3.必須定義一個靜態(tài)成員變量來保存當(dāng)前類唯一的一個對象;
4.創(chuàng)建對象:
- 餓漢式:在定義靜態(tài)成員變量時,直接創(chuàng)建當(dāng)前類的一個對象,進(jìn)行賦值
- 懶漢式:默認(rèn)不創(chuàng)建攘残,當(dāng)調(diào)用的時候才會創(chuàng)建
下面演示一下餓漢式和懶漢式兩種不同的創(chuàng)建方法
a.餓漢式
//餓漢式
private static HttpOperation instance = new HttpOperation();
b.懶漢式
//懶漢式
public static HttpOperation getInstane(){
//判斷對象是否有值
if (instance == null){
//加鎖保證輸入正確
synchronized (HttpOperation.class){
if (instance == null){
//創(chuàng)建一個對象
instance = new HttpOperation();
}
}
}
return instance;
}
2.抽象類Abstract模板設(shè)計模式
模板里面定義執(zhí)行的過程(有些功能自己可以實現(xiàn) 有些必須子類實現(xiàn))
抽象類使用abstract修飾
抽象類不能被實例化
3.抽象類里面可以定義成員變量|方法
- 抽象方法必須使用abstract修飾
- 而且不能被實現(xiàn)拙友,只能在子類中實現(xiàn)
4.子類繼承于抽象類
- 子類實現(xiàn)抽象類里面的抽象方法
- 如果不想實現(xiàn),可以將自己也變成抽象類
這里我們做了一個小Demo來演示一下抽象類Abstract模板設(shè)計模式:
Step1.首先創(chuàng)建一個抽象類模板Activity
public abstract class Activity {
private String className;
public Activity(){
//子類必須實現(xiàn)的方法
onCreate();
//可以選擇實現(xiàn)的方法
onStart();
onResume();
onPause();
onStop();
onDestroy();
}
//界面布局
public abstract void onCreate();
//開始啟動
public void onStart(){
}
//界面顯示出來了 可以交互了
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;
}
}
可以看到:在父類方法中歼郭,我們把onCreate方法定義為抽象類遗契,則子類里面就必須要有這個方法,其他方法隨意使用
Step2.創(chuàng)建子類MainActivity并繼承父類Activity
public class MainActivity extends Activity {
//抽象方法必須實現(xiàn)
@Override
public void onCreate() {
System.out.println("創(chuàng)建首頁的界面");
}
//子類可以重寫父類的方法
@Override
public void onResume() {
System.out.println("界面啟動了病曾,開始交互");
}
}
可以看到:父類中抽象方法必須實現(xiàn)牍蜂,其他方法可供重寫
Step3.在主程序MyClass中創(chuàng)建子類MainActivity的對象mActivity,實現(xiàn)MainActivity()方法
public void activity(){
//創(chuàng)建一個抽象類
MainActivity mActivity = new MainActivity();
}
打印結(jié)果:創(chuàng)建首頁的界面
界面啟動了泰涂,開始交互
3.抽象類實現(xiàn)造房子
抽象類和普通類的區(qū)別:
抽象類不能實例化鲫竞,普通類可以
抽象類里面可以有抽象方法(只申明 不實現(xiàn)),普通類不行
這里我們單獨做一個Demo來加深對抽象類模板的理解:
Step1.造房子首先需要圖紙逼蒙,定義一個DrawMap類作為抽象類模板从绘,并定義三個抽象類方法供子類使用(方法 顏色 材料)
public abstract class DrawMap {
public void buildHouse(){
//造什么方法
String type = getHouseType();
//選擇顏色
String color = getHouseColor();
//材料
String material = getMaterial();
System.out.println("即將使用" + material + "造一個" + color + "的" + type);
}
public abstract String getHouseType();
public abstract String getHouseColor();
public abstract String getMaterial();
}
Step2.定義一個子類Worker,并實現(xiàn)抽象類方法
public class Worker extends DrawMap{
@Override
public String getHouseType() {
return "鄉(xiāng)村小別墅";
}
@Override
public String getHouseColor() {
return "五顏六色";
}
@Override
public String getMaterial() {
return "鋼筋水泥";
}
}
Step3.最后我們在主程序MyClass中創(chuàng)建子類Worker的一個對象xw是牢,實現(xiàn)父類方法build()
public static void main(String[] args) {
Worker xw = new Worker();
xw.buildHouse();
}
打印結(jié)果:即將使用鋼筋水泥造一個五顏六色的鄉(xiāng)村小別墅
總結(jié)
1.單例設(shè)計模式全程最多涉及一個對象的創(chuàng)建和銷毀僵井,對性能和內(nèi)存影響小,不容易出現(xiàn)錯誤驳棱;
2.抽象類Abstract模板設(shè)計模式可以為子類提供一個公用的模板批什,可以隨意創(chuàng)建對象并使用抽象方法,體現(xiàn)了代碼的簡介性社搅。