讀banq的設計模式+最近的面試

pushengying發表於2009-07-09
最近經歷了好多場面試
都有意無意的問到了模式
我自己是很中意模式的
因為程式設計中加入模式後,可讓程式的可複用性可維護性強了
讓程式設計看起來像藝術了
讓自己不再累死在code上了

很熟悉吧,有些話是從banq哪裡學過來的

面試中面試官問我的幾個模式問題

1,解釋 橋接模式

2,log4j用了什麼模式
寫出兩種單例模式

3,寫出facade模式的
典型程式碼

很高興他們會問模式,雖然我有些沒有答出來
其中橋接模式我沒有答出來
回來後,我看了下,原來我看過好幾次的,是抽象與行為分離
問題形象描述:
小杯咖啡加牛奶 小杯咖啡不加牛奶
中杯咖啡加牛奶 中杯咖啡不加牛奶
大杯咖啡加牛奶 大杯咖啡不加牛奶

問題的可變元素 不加牛奶而是加葡萄果汁呢
那麼是不是又有很多種呢
有沒有辦法解決呢,橋接模式
類 咖啡
屬性(抽象),杯子
行為,加牛奶
把他們分離,這就是橋接模式(將屬性與行為解耦)

對抽象程式設計
責任劃分,把加牛奶\不加牛奶這種行為,劃分給誰合適呢
這是個要考慮的問題,這個每個人的想法不同,理由不同,可做不同的設計
下面程式碼過程中,我們主要關注屬性怎麼與行為分離
public abstract class Coffee{
private CoffeeImpl coffeeImpl;

//需要加把coffeeImpl例項化了

public void pour(){
coffeeImpl.pour();
}
}

public interface class CoffeeImpl{
public void pour();
}


public MilkCoffeeImpl implements CoffeeImpl{
public void pour(){
System.out.println("我是要加牛奶的");
}
}
橋接模式,看看名字,我想我們應該能想得到,那個是橋,為什麼是橋,怎麼橋接的
如果把杯子大小抽象為屬性
那麼好像跟策略模式有些相似呀,簡直一模一樣呀

log4j,是全域性的,還有管理日記資源的,所以很容易想到是單例模式的

facade模式
就有理清關係和能提供簡單介面的功能呀
banq書的facade模式一章中,裡畫了兩張圖,一看就明白了
不過他讓我寫出典型程式碼我就不知所措了

持有一個複雜類的引用
在抽象出的簡單的介面的實現中,呼叫複雜類的方法

這麼實現有點疑惑,怎麼有點像適配模式呀

不同的模式有不同的問題域
應該有不同的解決方案呀,我怎麼看起來有些方案相同呀
疑惑
明天再接著看書,找資料看看能不能解決這些問題

相關文章