學(xué)習(xí)內(nèi)容
- 單例設(shè)計(jì)模式
- 抽象類
- 抽象類實(shí)現(xiàn)造房子
一、單例設(shè)計(jì)模式
1棺牧、概念:確保某一個(gè)類只有一個(gè)實(shí)例巫糙,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。
2颊乘、優(yōu)點(diǎn):對(duì)于那些比較耗內(nèi)存的類参淹,只實(shí)例化一次可以大大提高性能,尤其是在移動(dòng)開發(fā)中乏悄,保持程序運(yùn)行的時(shí)候始終只有一個(gè)實(shí)例存在內(nèi)存中浙值。
3、實(shí)現(xiàn)步驟
(1)檩小、私有化所有的構(gòu)造方法 不讓外部自己去創(chuàng)建
private HttpOperation(){
}
(2)开呐、給外部提供一個(gè)靜態(tài)構(gòu)造方法 讓外部獲取當(dāng)前類的一個(gè)對(duì)象
(3)、使用synchronized保證線程安全
public static HttpOperation getInstance(){
//判斷對(duì)象是否有值
if(instance == null){
//加鎖,當(dāng)有多個(gè)進(jìn)程時(shí)可以增加安全性
synchronized (HttpOperation.class){
if (instance == null) {
//創(chuàng)建一個(gè)對(duì)象
instance = new HttpOperation();
}
}
}
return instance;
}
(4)负蚊、必須定義一個(gè)靜態(tài)變量來保存當(dāng)前類唯一的一個(gè)變量
(5)神妹、.創(chuàng)建對(duì)象 a、餓漢式:靜態(tài)成員變量直接創(chuàng)建當(dāng)前累的一個(gè)變量 進(jìn)行賦值家妆;b鸵荠、懶漢式:默認(rèn)不創(chuàng)建,當(dāng)調(diào)用時(shí)才會(huì)創(chuàng)建
//private static HttpOperation instance = new HttpOperation;餓漢式
private static HttpOperation instance;//懶漢式
(6)伤极、外部要?jiǎng)?chuàng)建一個(gè)實(shí)例只能用getInstance()方法
public class MyClass {
public static void main(String[] args) {
HttpOperation http1 = HttpOperation.getInstance();
HttpOperation http2 = HttpOperation.getInstance();
HttpOperation http3 = HttpOperation.getInstance();
System.out.println(http1);
System.out.println(http2);
System.out.println(http3);
}
}
2.抽象類
(1)概念 :從多個(gè)具有相同特征的類中抽象出一個(gè)抽象類蛹找,以這個(gè)抽象類作為子類的模板,從而避免了子類設(shè)計(jì)的隨意性哨坪,子類就只需要在抽象類的基礎(chǔ)上進(jìn)行擴(kuò)展庸疾、改造
(2)a、抽象類與抽象方法必須使用abstract修飾当编,且抽象方法不能有具體的實(shí)現(xiàn)方法
b届慈、抽象類不能被實(shí)例化 也無法用new關(guān)鍵字實(shí)例化
c、可以包含:成員變量忿偷、方法金顿、構(gòu)造方法、內(nèi)部類
d鲤桥、含有抽象方法的類只能被定義成抽象類
(3)抽象類與普通類的區(qū)別:
a揍拆、抽象類不能實(shí)例化 普通類可以
b、抽象類里面可以有抽象方法(只申明 不實(shí)現(xiàn)) 普通類不行
3.抽象類實(shí)現(xiàn)造房子
創(chuàng)建一個(gè)包(template_home)
創(chuàng)建一個(gè)抽象類DrawMap
ublic abstract class DrawMap {
public void buildHouse(){
//造什么房子
String type = getHouseType();
//什么顏色
String color = getHouseColor();
//需要什么材料
String materia = getMateria();
System.out.println("即將使用"+materia+"造一個(gè)"+color+"的"+type);
}
public abstract String getHouseType();
public abstract String getHouseColor();
public abstract String getMateria();
}
創(chuàng)建一個(gè)工人類 ( Woker)
public class worker extends DrawMap{
@Override
public String getHouseColor() {
return "五顏六色";
}
@Override
public String getMateria() {
return "鋼筋水泥";
}
@Override
public String getHouseType() {
return "鄉(xiāng)村小別墅";
}
}
創(chuàng)建一個(gè)主程序運(yùn)行
public class Myclass {
public static void main(String[] args) {
worker xw = new worker();
xw.buildHouse();
}
}