首页 > 编程语言 > 详细

创建者模式(Builder)java实现

时间:2021-01-17 21:42:08      阅读:25      评论:0      收藏:0      [点我收藏+]

//20210117
写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现创建者模式

创建者模式

  • 核心思想:一步一步构建出一个完整的对象,就拿电脑举例,有的电脑有水冷,有的电脑没有水冷,那么我只想有一个电脑创建类,那水冷选项就必须是可选择的而非强制的,这时候就要使用创建者模式来一步一步构建电脑对象

简化版创建者模式

  • 核心思想:通过内部类的方式来一步一步构建对象
  • 源代码如下

public class Computer_SimpleVersion {

    private final String cpu;//必须
    private final String ram;//必须
    private final int usbCount ;//可选
    private final String keyboard;//可选
    private final String display;//可选

    @Override
    public String toString() {
        return "Computer_SimpleVersion{" +
                "cpu=‘" + cpu + ‘\‘‘ +
                ", ram=‘" + ram + ‘\‘‘ +
                ", usbCount=" + usbCount +
                ", keyboard=‘" + keyboard + ‘\‘‘ +
                ", display=‘" + display + ‘\‘‘ +
                ‘}‘;
    }

    public Computer_SimpleVersion(Builder builder){
        this.cpu = builder.cpu;
        this.ram = builder.ram;
        this.usbCount = builder.usbCount;
        this.keyboard = builder.keyboard;
        this.display = builder.display;
    }

    public static class Builder{
        private String cpu;//必须
        private String ram;//必须
        private int usbCount ;//可选
        private String keyboard;//可选
        private String display;//可选
        public Builder(String cpu,String ram){
            this.cpu = cpu;
            this.ram = ram;
        }

        public Builder setUsbCount(int usbCount) {
            this.usbCount = usbCount;
            return this;
        }

        public Builder setKeyboard(String keyboard) {
            this.keyboard = keyboard;
            return this;
        }

        public Builder setDisplay(String display) {
            this.display = display;
            return this;
        }

        public Computer_SimpleVersion build(){
            return new Computer_SimpleVersion(this);
        }
    }
}

传统完整版创建者模式

  • 核心思想:比简化版多了一个指导类,其他模块大致相同
  • 源代码如下:
//电脑实体类
public class Computer {
    private String cpu;
    private String ram;
    private int usbCount;
    private String keyboard;
    private String display;

    @Override
    public String toString() {
        return "Computer{" +
                "cpu=‘" + cpu + ‘\‘‘ +
                ", ram=‘" + ram + ‘\‘‘ +
                ", usbCount=" + usbCount +
                ", keyboard=‘" + keyboard + ‘\‘‘ +
                ", display=‘" + display + ‘\‘‘ +
                ‘}‘;
    }

    public Computer(String cpu,String ram){
        this.cpu = cpu;
        this.ram = ram;
    }

    public int getUsbCount() {
        return usbCount;
    }

    public void setUsbCount(int usbCount) {
        this.usbCount = usbCount;
    }

    public String getKeyboard() {
        return keyboard;
    }

    public void setKeyboard(String keyboard) {
        this.keyboard = keyboard;
    }

    public String getDisplay() {
        return display;
    }

    public void setDisplay(String display) {
        this.display = display;
    }
}

//电脑构建者抽象父类
public abstract class ComputerBuilder {
    public abstract void setUsbCount();
    public abstract void setKeyboard();
    public abstract void setDisplay();

    public abstract Computer getComputer();
}

//苹果电脑建造者实现类
public class MacComputerBuilder extends ComputerBuilder{
    private Computer computer ;

    public MacComputerBuilder(String cpu,String ram){
        computer = new Computer(cpu,ram);
    }

    @Override
    public void setUsbCount() {
        this.computer.setUsbCount(2);
    }

    @Override
    public void setKeyboard() {
        this.computer.setKeyboard("苹果键盘");
    }

    @Override
    public void setDisplay() {
        this.computer.setDisplay("苹果显示器");
    }

    @Override
    public Computer getComputer() {
        return computer;
    }
}

//联想电脑构建者抽象父类
public class LenovoComputerBuilder extends ComputerBuilder {
    private Computer computer ;

    public LenovoComputerBuilder(String cpu,String ram){
        computer = new Computer(cpu,ram);
    }

    @Override
    public void setUsbCount() {
        this.computer.setUsbCount(4);
    }

    @Override
    public void setKeyboard() {
        this.computer.setKeyboard("联想键盘");
    }

    @Override
    public void setDisplay() {
        this.computer.setDisplay("ThinkPad显示器");
    }

    @Override
    public Computer getComputer() {
        return computer;
    }
}

//指导类——用于控制生成配件(此处因为二者的配件不相同,但是调用方法相同,所以创建一个指导类来控制生产)
public class BuilderDirector {
    public void makeComputer(ComputerBuilder builder){
        builder.setUsbCount();
        builder.setDisplay();
        builder.setKeyboard();
    }

}

//总体测试主类
public class Main {
    public static void main(String[] args) {
        Computer_SimpleVersion computerSimpleVersion = new Computer_SimpleVersion.Builder("因特尔","三星")
                .setDisplay("三星24寸")
                .setKeyboard("罗技")
                .setUsbCount(2)
                .build();

        System.out.println(computerSimpleVersion);

        BuilderDirector bd = new BuilderDirector();
        ComputerBuilder macComputerBuilder = new MacComputerBuilder("I5处理器","三星125");
        bd.makeComputer(macComputerBuilder);
        Computer macComputer = macComputerBuilder.getComputer();
        System.out.println(macComputer);

        ComputerBuilder lenovoComputerBuilder = new LenovoComputerBuilder("I7处理器","SS-6653");
        bd.makeComputer(lenovoComputerBuilder);
        Computer lenovoComputer = lenovoComputerBuilder.getComputer();
        System.out.println(lenovoComputer);

    }
}


  • 输出如下:
    技术分享图片

以上
希望对大家有所帮助

创建者模式(Builder)java实现

原文:https://www.cnblogs.com/lavender-pansy/p/14290177.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!