在MP3播放器中,無疑MP3或其他音樂文件的解碼就是這里的業務邏輯,而諸如“播放”、“暫停”這些接收用戶輸入的控件就是數據表現形式?,F在目的和明確了,就是將這兩這分離。

UI和Player的接口
但程序如何將這兩這組裝起來那?直接使用CUI和CPlayer?這樣的話,在更換UI或者希望能播放wav之類的音樂時,對代碼的修改都不符合開放封閉原則。但是加上Factory呢?

加上Factory后的UML圖
一切似乎都在改變。如果最開始是用MFC做的一套UI,現在需要將程序移植到Linux上,且用Qt做UI來實現MP3的播放,那么只需要添加CLinuxQtUI類實現IUI接口就可以了,程序的大部分代碼不需要改變。假如想支持wma文件的播放,好,只需另外再增加一個類CwmaPlayer來實現IPlayer就完了。
顯然這樣的工作量減少很多。