Sunny 软件公司欲开发一个视频播放软件,为了方便用户使用,该播放软件提供多种界面显示模式,例如完整模式、精简模式、记忆模式、网络模式等。在不同的显示模式下主界面的组成元素有所差异。例如,在完整模式下将显示菜单、播放列表、主窗口、控制条等,在精简模式下只显示主窗口和控制条,而在记忆模式下将显示主窗口、控制条、收藏列表等。试使用建造者模式设计该软件。
一、类结构图
指挥者类:设计为名称为 Director 的具体类,面向抽象建造者类编程,包含具体方法 construct(PlayScreenBuilder builder);
抽象建造者类:设计为名称为 PlayScreenBuilder 的抽象类,持有一个具体产品角色类对象的引用,包含抽象方法 buildMenu()、抽象方法 buildPlayList()、抽象方法 buildControlBar()、抽象方法 buildFavoriteList()、具体方法方法 buildMainWindow()、具体方法 getResult();
具体建造者类:设计为抽象建造者类 PlayScreenBuilder 的子类,包括具体类 FullModeBuilder、具体类 MiniModeBuilder、具体类 MemeryModeBuilder,分别实现抽象建造者类的抽象方法,并按需要对有些抽象方法做空实现;
产品角色类:设计为名称为 PlayScreen 的具体类,包含具体方法 setMenu(String menu)、具体方法 setPlayList(String playList)、具体方法 setMainWindow(String mainWindow)、具体方法 setControlBar(String controlBar)、具体方法 setFavoriteList(String favoriteList)。
二、典型实现代码
具体播放界面建造指挥者类:具体指挥者类
// 具体播放界面建造指挥者类:具体指挥者类
public class Director {
public PlayScreen construct(PlayScreenBuilder builder) {
builder.buildMainWindow();
builder.buildMenu();
builder.buildPlayList();
builder.buildControlBar();
builder.buildFavoriteList();
return builder.getResult();
}
}
复制代码
抽象播放界面建造者类:抽象建造者类
// 抽象播放界面建造者类:抽象建造者类
public abstract class PlayScreenBuilder {
private PlayScreen playScreen = new PlayScreen();
public PlayScreen getResult() {
return this.playScreen;
}
public void buildMainWindow() {
System.out.println("显示主窗口");
}
public abstract void buildMenu();
public abstract void buildPlayList();
public abstract void buildControlBar();
public abstract void buildFavoriteList();
}
复制代码
具体完整模式播放界面建造者类:具体建造者类
// 具体完整模式播放界面建造者类:具体建造者类
public class FullModeBuilder extends PlayScreenBuilder{
@Override
public void buildMenu() {
System.out.println("显示菜单");
}
@Override
public void buildPlayList() {
System.out.println("显示播放列表");
}
@Override
public void buildControlBar() {
System.out.println("显示控制条");
}
@Override
public void buildFavoriteList() {
System.out.println("显示收藏列表");
}
}
复制代码
具体精简模式播放界面建造者类:具体建造者类
// 具体精简模式播放界面建造者类:具体建造者类
public class MiniModeBuilder extends PlayScreenBuilder {
@Override
public void buildMenu() {
}
@Override
public void buildPlayList() {
}
@Override
public void buildControlBar() {
System.out.println("显示控制条");
}
@Override
public void buildFavoriteList() {
}
}
复制代码
具体记忆模式播放界面建造者类:具体建造者类
// 具体记忆模式播放界面建造者类:具体建造者类
public class MemoryModeBuilder extends PlayScreenBuilder{
@Override
public void buildMenu() {
}
@Override
public void buildPlayList() {
}
@Override
public void buildControlBar() {
System.out.println("显示控制条");
}
@Override
public void buildFavoriteList() {
System.out.println("显示收藏列表");
}
}
复制代码
具体播放界面类:具体产品角色类
// 具体播放界面类:具体产品角色类
public class PlayScreen {
private String menu;
private String playList;
private String mainWindow;
private String controlBar;
private String favoriteList;
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;
}
public String getFavoriteList() {
return favoriteList;
}
public void setFavoriteList(String favoriteList) {
this.favoriteList = favoriteList;
}
}
复制代码
客户端代码:
public class Client {
public static void main(String[] args) {
Director director;
PlayScreenBuilder fullScreenBuilder, miniModeBuilder, memoryModeBuilder;
System.out.println("完整模式界面显示:");
fullScreenBuilder = new FullModeBuilder();
director = new Director();
director.construct(fullScreenBuilder);
System.out.println();
System.out.println("精简模式界面显示:");
miniModeBuilder = new MiniModeBuilder();
director.construct(miniModeBuilder);
System.out.println();
System.out.println("记忆模式界面显示:");
memoryModeBuilder = new MemoryModeBuilder();
director.construct(memoryModeBuilder);
}
}
复制代码
编译并运行程序,输出如下结果:
完整模式界面显示:
显示主窗口
显示菜单
显示播放列表
显示控制条
显示收藏列表
精简模式界面显示:
显示主窗口
显示控制条
记忆模式界面显示:
显示主窗口
显示控制条
显示收藏列表
复制代码
评论