建造者模式

参考《设计模式的艺术软件开发人员内功修炼之道》-刘伟 著

实验目的

建造者模式相当于带组装功能的抽象工厂,由Director负责组装,Builder负责生产具体Product,一个Builder对应一个Product

实验代码

package BuilderPattern;

class Video {
    // data
    protected String menu;
    protected String playlist;
    protected String mainWindow;
    protected String controlbar;
}

abstract class VideoBuilder {
    protected Video video = new Video();

    // build action
    abstract public void buildMenu();

    abstract public void buildPlaylist();

    abstract public void buildMainWindow();

    abstract public void buildControlBar();

    public boolean isbuildMenu() {
        return true;
    }

    public boolean isbuildPlaylist() {
        return true;
    }

    public boolean isbuildMainMenu() {
        return true;
    }

    public boolean isbuildControlBar() {
        return true;
    }

    // construct
    public Video getResult() {
        return video;
    }
}

class FullBuilder extends VideoBuilder {

    @Override
    public void buildMenu() {
        // TODO Auto-generated method stub
        video.menu = "FullBuilderMenu";
        System.out.println("buildMenu in FullBuilder");
    }

    @Override
    public void buildPlaylist() {
        // TODO Auto-generated method stub
        video.playlist = "FullBuilderPlaylist";
        System.out.println("buildPlaylist in FullBuilder");
    }

    @Override
    public void buildMainWindow() {
        // TODO Auto-generated method stub
        video.mainWindow = "FullBuilderMainWindow";
        System.out.println("buildMainMenu in FullBuilder");
    }

    @Override
    public void buildControlBar() {
        // TODO Auto-generated method stub
        video.controlbar = "FullBuilderControlBar";
        System.out.println("buildControlBar in FullBuilder");
    }

}

class StreamlinedBuilder extends VideoBuilder {

    @Override
    public void buildMenu() {
        // TODO Auto-generated method stub
        video.menu = "StreamlinedBuilderMenu";
        System.out.println("buildMenu in StreamlinedBuilder");
    }

    @Override
    public void buildPlaylist() {
        // TODO Auto-generated method stub
        video.playlist = "StreamlinedBuilderPlaylist";
        System.out.println("buildPlaylist in StreamlinedBuilder");
    }

    @Override
    public void buildMainWindow() {
        // TODO Auto-generated method stub
        video.mainWindow = "StreamlinedBuilderMainWindow";
        System.out.println("buildMainMenu in StreamlinedBuilder");
    }

    @Override
    public void buildControlBar() {
        // TODO Auto-generated method stub
        video.controlbar = "StreamlinedBuilderControlBar";
        System.out.println("buildControlBar in StreamlinedBuilder");
    }

    public boolean isbuildPlaylist() {
        return false;
    }


}

class MemoryBuilder extends VideoBuilder {

    @Override
    public void buildMenu() {
        // TODO Auto-generated method stub
        video.menu = "MemoryBuilderMenu";
        System.out.println("buildMenu in MemoryBuilder");
    }

    @Override
    public void buildPlaylist() {
        // TODO Auto-generated method stub
        video.playlist = "MemoryBuilderPlaylist";
        System.out.println("buildPlaylist in MemoryBuilder");
    }

    @Override
    public void buildMainWindow() {
        // TODO Auto-generated method stub
        video.mainWindow = "MemoryBuilderMainWindow";
        System.out.println("buildMainMenu in MemoryBuilder");
    }

    @Override
    public void buildControlBar() {
        // TODO Auto-generated method stub
        video.controlbar = "MemoryBuilderControlBar";
        System.out.println("buildControlBar in MemoryBuilder");
    }

}

class NetworkBuilder extends VideoBuilder {

    @Override
    public void buildMenu() {
        // TODO Auto-generated method stub
        video.menu = "NetworkBuilderMenu";
        System.out.println("buildMenu in NetworkBuilder");
    }

    @Override
    public void buildPlaylist() {
        // TODO Auto-generated method stub
        video.playlist = "NetworkBuilderPlaylist";
        System.out.println("buildPlaylist in NetworkBuilder");
    }

    @Override
    public void buildMainWindow() {
        // TODO Auto-generated method stub
        video.mainWindow = "NetworkBuilderMainWindow";
        System.out.println("buildMainMenu in NetworkBuilder");
    }

    @Override
    public void buildControlBar() {
        // TODO Auto-generated method stub
        video.controlbar = "NetworkBuilderControlBar";
        System.out.println("buildControlBar in NetworkBuilder");
    }

}

class BuilderDirector {
    public Video constructor(VideoBuilder videoBuilder) {
        if (videoBuilder.isbuildMenu())
            videoBuilder.buildMenu();
        if (videoBuilder.isbuildPlaylist())
            videoBuilder.buildPlaylist();
        if (videoBuilder.isbuildMainMenu())
            videoBuilder.buildMainWindow();
        if (videoBuilder.isbuildControlBar())
            videoBuilder.buildControlBar();
        return videoBuilder.getResult();
    }
}

public class BuilderPatternTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        BuilderDirector builderDirector = new BuilderDirector();
        VideoBuilder videoBuilder = new StreamlinedBuilder();
        Video video = builderDirector.constructor(videoBuilder);
        System.out.println(video.menu);
        System.out.println(video.mainWindow);
        System.out.println(video.playlist);
        System.out.println(video.controlbar);

    }

}

结果输出

buildMenu in StreamlinedBuilder
buildMainMenu in StreamlinedBuilder
buildControlBar in StreamlinedBuilder
StreamlinedBuilderMenu
StreamlinedBuilderMainWindow
null
StreamlinedBuilderControlBar

结论

  • 建造者模式通过Director对Builder生产的Product的各个部分进行构造
  • 可以简化建造者模式,将Director和Builder功能进行合并,即生产和组装功能合并
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值