建造者模式
一、題目:
某軟件公司要開發一個視頻播放軟件,爲了給用戶提供方便,該播放軟件提供了多種界面顯示模式,如完整模式、精簡模式、記憶模式、網絡模式等。在不同的顯示模式下,主界面的組成元素有所差異,如在完整模式下將顯示菜單、播放列表、主窗口、控制條等,在精簡模式下只顯示主窗口和控制條,而在記憶模式下,將顯示主窗口、控制條、收藏列表等。試用建造者模式設計軟件。
(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());
}
}
五、運行結果: