什麼是設計模式 現在聊起來java設計,那就必然要聊聊設計模式,幾年前我剛入行的時候,總是聽人說起設計模式,在當時的我看來,那是多麼高大上的東西啊,以至於有種遙不可及的感覺,如今自己做java也好幾個年頭了,今天來談談如今我眼中的設計模式 說白了,設計模式就是前輩高人總結出來的一套編寫好代碼的方法,
什麼是設計模式
現在聊起來java設計,那就必然要聊聊設計模式,幾年前我剛入行的時候,總是聽人說起設計模式,在當時的我看來,那是多麼高大上的東西啊,以至於有種遙不可及的感覺,如今自己做java也好幾個年頭了,今天來談談如今我眼中的設計模式
說白了,設計模式就是前輩高人總結出來的一套編寫好代碼的方法,就好比是面向對象的武林秘籍,凡夫俗子如果能夠運用自如也立馬能夠成為武林高手.
那什麼又是虛擬工廠呢?
在聊虛擬工廠之前,我們先舉個例子:
我們把漢堡快餐店抽象到面向對象的世界里,那我們要怎麼做呢? 首先我們建造一個快餐店的模型,我們可以在快餐店裡點漢堡,點飲料
public interface FastFoodStore {
/**點漢堡 */
Hamburger orderHamburger();
/**點飲料 */
Drink orderDrink();
}
有了快餐店,我們不能忘記最重要的東西--食物, 於是我們有了漢堡和飲料的模型:
public interface Drink {
/** */
public void desc();
}
public interface Hamburger {
/** */
void desc();
}
那麼你喜歡吃哪家快餐呢? 我們有很多種選擇,比如說KFC,
public class KFC implements FastFoodStore {
/**點KFC的漢堡 */
public Hamburger orderHamburger() {
return new KFCHamburger();
}
/**點KFC的飲料 */
public Drink orderDrink() {
return new KFCDrink();
}
}
比如說McDonald:
public class Mcdonald implements FastFoodStore {
/**點McDonald漢堡 */
public Hamburger orderHamburger() {
return new McHamburger();
}
/**點McDonald飲料 */
public Drink orderDrink() {
return new McDrink();
}
}
當然每個店的口味可不一樣,對於KFC,它有自己的漢堡和飲料:
public class KFCDrink implements Drink {
/** */
public void desc() {
System.out.println("KFC飲料");
}
}
public class KFCHamburger implements Hamburger {
/** */
public void desc() {
System.out.println("KFC漢堡");
}
}
McDonald 也一樣:
public class McDrink implements Drink {
/** */
public void desc() {
System.out.println("Mcdonald飲料");
}
}
public class McHamburger implements Hamburger {
/** */
public void desc() {
System.out.println("McDonald漢堡");
}
}
糾結了半天,我打算兩家都吃一遍:
public static void main(String[] args) {
FastFoodStore food ;
Hamburger hamburger;
Drink drink;
//先去KFC
food = new KFC();
//點餐
hamburger = food.orderHamburger();
drink = food.orderDrink();
//看看賣相怎麼樣
hamburger.desc();
drink.desc();
//再去McDonald
food = new Mcdonald();
//點餐
hamburger = food.orderHamburger();
drink = food.orderDrink();
//再看看怎麼樣
hamburger.desc();
drink.desc();
}
結果
KFC漢堡
KFC飲料
McDonald漢堡
Mcdonald飲料
其實這就是抽象工廠,引用專業的定義就是 為創建一組相關或相互依賴的對象提供一個介面,而且無需指定它們的具體類