一分鐘了解python的facade pattern
Facade Pattern 是一種常用的設(shè)計模式,它提供了一個簡單的接口,用于訪問復(fù)雜系統(tǒng)的子系統(tǒng)。這個模式可以使得系統(tǒng)更加易于使用和維護。在 Python 中,F(xiàn)acade Pattern 可以通過封裝一組相關(guān)的類,來提供一個簡單的接口,用于訪問這些類的功能。
?下面我們將用一個簡單的例子來說明這個模式。
?假設(shè)我們正在開發(fā)一個音樂播放器程序,它需要支持 MP3、FLAC 和 WAV 三種音頻格式。我們需要設(shè)計一個程序,用于讀取和播放這些音頻文件,并提供一組簡單的接口,供用戶來控制播放器的功能。
?我們首先定義一個外觀類 MusicPlayerFacade,它封裝了一組相關(guān)的類,用于讀取和播放音頻文件。這個類提供了一組簡單的接口,用于控制播放器的功能。
class MusicPlayerFacade:
? ? def __init__(self):
? ? ? ? self.mp3_player = MP3Player()
? ? ? ? self.flac_player = FLACPlayer()
? ? ? ? self.wav_player = WAVPlayer()
? ? ?def play(self, filename):
? ? ? ? if filename.endswith('.mp3'):
? ? ? ? ? ? self.mp3_player.play_mp3(filename)
? ? ? ? elif filename.endswith('.flac'):
? ? ? ? ? ? self.flac_player.play_flac(filename)
? ? ? ? elif filename.endswith('.wav'):
? ? ? ? ? ? self.wav_player.play_wav(filename)
? ? ? ? else:
? ? ? ? ? ? print(f'Unsupported format: {filename}')
? ? ?def stop(self):
? ? ? ? self.mp3_player.stop()
? ? ? ? self.flac_player.stop()
? ? ? ? self.wav_player.stop()
? ? ?def volume_up(self):
? ? ? ? self.mp3_player.volume_up()
? ? ? ? self.flac_player.volume_up()
? ? ? ? self.wav_player.volume_up()
? ? ?def volume_down(self):
? ? ? ? self.mp3_player.volume_down()
? ? ? ? self.flac_player.volume_down()
? ? ? ? self.wav_player.volume_down()
MusicPlayerFacade 類包含三個子系統(tǒng)類 MP3Player、FLACPlayer 和 WAVPlayer。這些類分別用于讀取和播放 MP3、FLAC 和 WAV 格式的音頻文件。這個外觀類提供了一組簡單的接口,用于控制播放器的功能,比如播放、停止、音量調(diào)節(jié)等。
?接下來我們定義三個子系統(tǒng)類,它們分別用于讀取和播放 MP3、FLAC 和 WAV 格式的音頻文件,并提供相應(yīng)的控制接口。
class MP3Player:
? ? def play_mp3(self, filename):
? ? ? ? print(f'Playing MP3: {filename}')
? ? ?def stop(self):
? ? ? ? print('MP3 stopped')
? ? ?def volume_up(self):
? ? ? ? print('MP3 volume up')
? ? ?def volume_down(self):
? ? ? ? print('MP3 volume down')
?class FLACPlayer:
? ? def play_flac(self, filename):
? ? ? ? print(f'Playing FLAC: {filename}')
? ? ?def stop(self):
? ? ? ? print('FLAC stopped')
? ? ?def volume_up(self):
? ? ? ? print('FLAC volume up')
? ? ?def volume_down(self):
? ? ? ? print('FLAC volume down')
?class WAVPlayer:
? ? def play_wav(self, filename):
? ? ? ? print(f'Playing WAV: {filename}')
? ? ?def stop(self):
? ? ? ? print('WAV stopped')
? ? ?def volume_up(self):
? ? ? ? print('WAV volume up')
? ? ?def volume_down(self):
? ? ? ? print('WAV volume down')
這些子系統(tǒng)類分別用于讀取和播放 MP3、FLAC 和 WAV 格式的音頻文件,并提供相應(yīng)的控制接口,比如播放、停止、音量調(diào)節(jié)等。
?最后,我們來測試這個程序。我們創(chuàng)建一個 MusicPlayerFacade 對象,并使用它來播放和控制音樂播放器的功能。
player = MusicPlayerFacade()
player.play('song.mp3')
player.volume_up()
player.play('song.flac')
player.stop()
這個程序?qū)⑤敵鋈缦聝?nèi)容:
Playing MP3: song.mp3
MP3 volume up
Playing FLAC: song.flac
FLAC stopped
這個例子中,我們使用 Facade Pattern 來封裝一組相關(guān)的類,用于讀取和播放音頻文件,并提供一組簡單的接口,用于控制播放器的功能。這個模式使得音樂播放器更加易于使用和維護,而且也可以方便地擴展到支持更多的音頻格式或者添加更多的控制接口。