写点什么

设计模式的艺术 第八章建造者设计模式练习(开发一个视频播放软件,为了方便用户使用,该播放软件提供多种界面显示模式,例如完整模式、精简模式、记忆模式、网络模式等。在不同的显示模式下主界面的组成元素有所差异。例如,在精简模式下只显示主窗口、控制条)

作者:代廉洁
  • 2022 年 9 月 06 日
    浙江
  • 本文字数:2710 字

    阅读完需:约 9 分钟

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); }}
复制代码


编译并运行程序,输出如下结果:
完整模式界面显示:显示主窗口显示菜单显示播放列表显示控制条显示收藏列表
精简模式界面显示:显示主窗口显示控制条
记忆模式界面显示:显示主窗口显示控制条显示收藏列表
复制代码


发布于: 刚刚阅读数: 3
用户头像

代廉洁

关注

还未添加个人签名 2019.10.15 加入

还未添加个人简介

评论

发布
暂无评论
设计模式的艺术 第八章建造者设计模式练习(开发一个视频播放软件,为了方便用户使用,该播放软件提供多种界面显示模式,例如完整模式、精简模式、记忆模式、网络模式等。在不同的显示模式下主界面的组成元素有所差异。例如,在精简模式下只显示主窗口、控制条)_设计模式的艺术_代廉洁_InfoQ写作社区