設計模式練習(4)——建造者模式

建造者模式

一、題目:

某軟件公司要開發一個視頻播放軟件,爲了給用戶提供方便,該播放軟件提供了多種界面顯示模式,如完整模式、精簡模式、記憶模式、網絡模式等。在不同的顯示模式下,主界面的組成元素有所差異,如在完整模式下將顯示菜單、播放列表、主窗口、控制條等,在精簡模式下只顯示主窗口和控制條,而在記憶模式下,將顯示主窗口、控制條、收藏列表等。試用建造者模式設計軟件。
(1)給出建造者模式等結構視圖
(2)給出該實例等類圖及代碼實現

二、所用模式結構視圖:

這裏寫圖片描述

三、實例類圖:

這裏寫圖片描述

四、實例實現代碼:

(因爲區分,所以在類的前面加了Gj19)

複雜對象:

package BuilderPattern;
/**
 * 複雜對象
 * @author gong
 *
 */
public class Gj19MainScreen {
    public String menu;  //菜單
    public String playList;  //播放列表
    public String mainWindow;  //主窗口
    public String controlBar;  //控制條
    public String getMenu() {
        return menu;
    }
    public void setMenu(String menu) {
        this.menu = menu;
    }
    public String getPlayList() {
        return playList;
    }
    public void setPlayList(String playList) {
        this.playList = playList;
    }
    public String getMainWindow() {
        return mainWindow;
    }
    public void setMainWindow(String mainWindow) {
        this.mainWindow = mainWindow;
    }
    public String getControlBar() {
        return controlBar;
    }
    public void setControlBar(String controlBar) {
        this.controlBar = controlBar;
    }


}

抽象建造者類

package BuilderPattern;
/**
 * 抽象建造者類
 * @author gong
 *
 */
abstract class Gj19ModeBuilder {
    protected Gj19MainScreen screen = new Gj19MainScreen();   //創建產品對象
    public abstract void buildMenu();  
    public abstract void buildPlayList();  
    public abstract void buildMainWindow(); 
    public abstract void buildControlBar();  
    public Gj19MainScreen getScreen()  {    //返回產品對象 --工廠方法
        return screen;
        } 
}

具體建造者–完整模式

package BuilderPattern;
/**
 * 具體建造者--完整模式
 * @author gong
 *
 */
public class Gj19FullModeBuilder extends Gj19ModeBuilder{

    @Override
    public void buildMenu() {
        screen.setMenu("完整菜單");
    }

    @Override
    public void buildPlayList() {
        screen.setPlayList("完整播放列表");
    }

    @Override
    public void buildMainWindow() {
        screen.setMainWindow("完整主窗口");
    }

    @Override
    public void buildControlBar() {
        screen.setControlBar("完整控制條");
    }

}

具體建造者–精簡模式

package BuilderPattern;
/**
 * 具體建造者--精簡模式
 * @author gong
 *
 */
public class Gj19SimpleModeBuilder extends Gj19ModeBuilder{

    @Override
    public void buildMenu() {
        screen.setMenu("精簡菜單");
    }

    @Override
    public void buildPlayList() {
        screen.setPlayList("精簡播放列表");
    }

    @Override
    public void buildMainWindow() {
        screen.setMainWindow("精簡主窗口");
    }

    @Override
    public void buildControlBar() {
        screen.setControlBar("精簡控制條");
    }

}

指揮者類

package BuilderPattern;
/**
 * 指揮者類
 * @author gong
 *
 */
public class Gj19ScreenModeController{
    private Gj19ModeBuilder mb;  
    public void setModeBuilder(Gj19ModeBuilder mb ){   
        this.mb = mb;  
    }  
    public Gj19MainScreen construct(Gj19ModeBuilder mb){  
        Gj19MainScreen ms;   
        mb.buildMenu();   
        mb.buildPlayList();   
        mb.buildMainWindow();   
        mb.buildControlBar();   
        ms=   mb.getScreen();   
        return ms;  
        }
}

測試建造者模式類

package BuilderPattern;
/**
 * 測試建造者模式類
 * @author gong
 *
 */
public class TestBuilderPattern {
    public static void main(String[] args) {
        Gj19ModeBuilder mb;  //針對抽象建造者編程
        mb = new Gj19FullModeBuilder();  //構造完整模式界面

        Gj19ScreenModeController smc=new Gj19ScreenModeController();

        Gj19MainScreen screen;    
          screen = smc.construct(mb) ; 
         System.out.println("菜單:"+screen.getMenu());
         System.out.println("播放列表:"+screen.getPlayList());
         System.out.println("主窗口:"+screen.getMainWindow());
         System.out.println("控制條:"+screen.getControlBar());
    }
}

五、運行結果:

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章