设计模式 - 创建型 - 建造者


1、概念说明:

使用前提:当一个类的构造函数参数个数超过2个,而且这些参数有些是可选的参数,考虑使用构造者模式。 构造者可以对复杂业务的流程进行随意调整顺序并完成对象的创建,来兼容多个复杂模式;

2、实战

1、本文针对传统和新式的建造者模式都进行描述

2、builder模式有4个角色。Product: 最终要生成的对象,例如 Computer实例。Builder: 构建者的抽象基类(有时会使用接口代替)。其定义了构建Product的抽象步骤,其实体类需要实现这些步骤。其会包含一个用来返回最终产品的方法Product getProduct()。ConcreteBuilder: Builder的实现类。Director: 决定如何构建最终产品的算法. 其会包含一个负责组装的方法void Construct(Builder builder), 在这个方法中通过调用builder的方法,就可以设置builder,等设置完成后,就可以通过builder的 getProduct() 方法获得最终的产品。

 2.1传统建造者模式

setup1:产品类,需要建造者产出的对象

public class Computer {

    private String cpu;//必须

    private String ram;//必须

    private int usbCount;//可选

    private String keyboard;//可选

    private String display;//可选

}


setup2:构建抽象类

public abstract class ComputerBuilder {

    public abstract void setUsbCount();

    public abstract void setKeyboard();

    public abstract void setDisplay();

    public abstract Computer getComputer();

}


#steps3 构建实现类: 苹果电脑构建者类

public class MacComputerBuilder extends ComputerBuilder {

    private Computer computer;

    public MacComputerBuilder(String cpu, String ram) {

        computer = new Computer(cpu, ram);

    }

    @Override

    public void setUsbCount() {

        computer.setUsbCount(2);

    }

    @Override

    public void setKeyboard() {

        computer.setKeyboard("苹果键盘");

    }

    @Override

    public void setDisplay() {

        computer.setDisplay("苹果显示器");

    }

    @Override

    public Computer getComputer() {

        return computer;

    }

}


setps4:导演类,负责组装流程,完成业务

public class Director {

        public Computer build(Builder builder){

                builder.buildCpu();

                builder.buildMainBoard();

                builder.buildMemory();

                return builder.createComputer();

        }

}


setps5:最终使用

public static void main(String[] args) {

        ComputerDirector director=new ComputerDirector();//1

        ComputerBuilder builder=new MacComputerBuilder("I5处理器","三星125");//2

        director.makeComputer(builder);//3

        Computer macComputer=builder.getComputer();//4

        System.out.println("mac computer:"+macComputer.toString());

        }


2.2新式建造者模式

setps1:产品类及产品的builder监造器

package builder;

public class Computer {

private Stringcpu;//必须

    private Stringram;//必须

    private int usbCount;//可选

    private Stringkeyboard;//可选

    private Stringdisplay;//可选

    private Computer(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 Stringcpu;//必须

        private Stringram;//必须

        private int usbCount;//可选

        private Stringkeyboard;//可选

        private Stringdisplay;//可选

        public Builder(String cup,String ram){

this.cpu=cup;

            this.ram=ram;

        }

public BuildersetUsbCount(int usbCount) {

this.usbCount = usbCount;

return this;

        }

public BuildersetKeyboard(String keyboard) {

this.keyboard = keyboard;

return this;

        }

public BuildersetDisplay(String display) {

this.display = display;

return this;

        }

public Computerbuild(){

return new Computer(this);

        }

}

public StringgetCpu() {

return cpu;

    }

public void setCpu(String cpu) {

this.cpu = cpu;

    }

public StringgetRam() {

return ram;

    }

public void setRam(String ram) {

this.ram = ram;

    }

public int getUsbCount() {

return usbCount;

    }

public void setUsbCount(int usbCount) {

this.usbCount = usbCount;

    }

public StringgetKeyboard() {

return keyboard;

    }

public void setKeyboard(String keyboard) {

this.keyboard = keyboard;

    }

public StringgetDisplay() {

return display;

    }

public void setDisplay(String display) {

this.display = display;

    }

}

steps2:调用者直接通过链式调用方式,建造产品的逻辑及顺序

public static void main(String[] args) {

Computer computer=new Computer.Builder("因特尔","三星")

.setDisplay("三星24寸")

.setKeyboard("罗技")

.setUsbCount(2)

.build();

}

3、思考

新式建造者模式是老式建造者的变种,也是时代在进化后,对待业务的处理方式的变化,新式建造者模式实际是对老式的简化,简化掉了接口及接口实现;直接由调用者进行管理产品的细节把控;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 建造者模式:将一个复杂对象的构建与它的表示分离,是的同样的构建过程可以创建不同的表示 使用建造者模式,客户端只需要...
    超级大鸡腿阅读 217评论 0 0
  • 设计模式 设计模式的本质是面向对象设计原则的实际运用,是对类的==封装性==、==继承性==和==多态性==以及类...
    anlostsheep阅读 270评论 0 0
  • 个人学习笔记分享,当前能力有限,请勿贬低,菜鸟互学,大佬绕道如有勘误,欢迎指出和讨论,本文后期也会进行修正和补充 ...
    Echo_YeZ阅读 241评论 0 0
  • 设计模式-建造者模式 概念 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 用户只需指定...
    蜗牛写java阅读 242评论 0 0
  • 1.简介 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 2.使用场景 主要解决在软件系统...
    夜沐下的星雨阅读 135评论 0 0