1. 程式人生 > >設計模式面試與筆試題剖析(三)

設計模式面試與筆試題剖析(三)

Windows Media Player和RealPlayer是兩種常用的媒體播放器,它們的API結構和呼叫方法存在區別。現在你的應用程式需要支援這兩種播放器API,而且在將來可能還需要支援新的媒體播放器,請問如何設計該應用程式?

       參考解答:【個人觀點】

      本題可使用介面卡模式和抽象工廠模式,參考類圖如下所示:

      在該類圖中,我們為兩種不同的播放器提供了兩個具體工廠類MediaPlayerFactoryRealPlayerFactory,其中MediaPlayerFactory作為Windows Media Player播放器工廠,可以建立Windows Media Player

的主視窗(MediaPlayerWindow)和播放列表(MediaPlayerList)(為了簡化類圖,只列出主視窗和播放列表這兩個播放器組成元素,實際情況下包含更多組成元素);RealPlayerFactory作為RealPlayer播放器工廠,建立RealPlayer的主視窗(RealPlayerWindow)和播放列表(RealPlayerList),此時可以使用抽象工廠模式,客戶端針對抽象工廠PlayerFactory程式設計,如果增加新的播放器,只需增加一個新的具體工廠來生產新產品族中的產品即可。由於需要呼叫現有API中的方法,因此還需要使用介面卡模式,在具體產品類如MediaPlayerWindow
MediaPlayerList呼叫Windows Media Player API中的方法,在RealPlayerWindowRealPlayerList中呼叫RealPlayer API中的方法,實現對API中方法的適配,此時具體產品如MediaPlayerWindowRealPlayerWindow等充當介面卡,而已有的APIMediaPlayerAPIRealPlayerAPI是需要適配的適配者。