某小型网站开发公司创业策划,企业文化理念,河南省建设厅上班时间,在视频网站中做节目怎么挣钱建造者模式 建造者模式概述结构结果优缺点使用场景 将上述案例改为链式调用结果 建造者模式
概述
将一个复杂对象的构建与表示分离#xff0c;使得同样的构建过程可以创建不同的表示。
分离了部件的构建#xff08;由Builder来负责#xff09;和装配#xff08;由Direct… 建造者模式 建造者模式概述结构结果优缺点使用场景 将上述案例改为链式调用结果 建造者模式
概述
将一个复杂对象的构建与表示分离使得同样的构建过程可以创建不同的表示。
分离了部件的构建由Builder来负责和装配由Director负责。从而可以构建出复杂的对象。这个模式适用于某个对象的构建过程复杂的情况。由于实现了构建和装配的解耦。不同的构建器相同的装配也可以做出不同的对象相同的构建器不同的装配顺序也可以做出不同的对象。实现了更好的复用。建造者模式可以将部件与其组装过程分开一步一步创建一个复杂对象。用户只需要指定复杂对象的类型就可以获得该对象而无需知道内部的构造细节。
结构
建造者Builder模式包含如下角色
抽象建造者类Builder这个接口规定要实现复杂对象的那些部分的创建并不涉及具体的部件对象的创建。具体建造者类ConcreteBuilder实现Builder接口完成复杂产品的各个部件的具体创建方法。在构造过程完成后提供产品的实例。产品类Product要创建的复杂对象指挥者类Director调用具体建造者来创建复杂对象的各个部分在指导者中不涉及具体产品的信息只负责保证对象各个部分完整创建或按某种顺序创建。 类图
/*** 抽象建造者类*/
public abstract class Builder {// 声明computer类型的变量并赋值protected Computer computer new Computer();public abstract Computer createComputer();public abstract void builderMemory();public abstract void builderHardDrive();public abstract void builderMotherBoard();public abstract void builderPowerSource();public abstract void builderCpu();
}/*** 电脑类*/
public class Computer {private String memory;private String hardDrive;private String motherBoard;private String powerSource;private String cpu;public String getMemory() {return memory;}public void setMemory(String memory) {this.memory memory;}public String getHardDrive() {return hardDrive;}public void setHardDrive(String hardDrive) {this.hardDrive hardDrive;}public String getMotherBoard() {return motherBoard;}public void setMotherBoard(String motherBoard) {this.motherBoard motherBoard;}public String getPowerSource() {return powerSource;}public void setPowerSource(String powerSource) {this.powerSource powerSource;}public String getCpu() {return cpu;}public void setCpu(String cpu) {this.cpu cpu;}Overridepublic String toString() {return Computer{ memory memory \ , hardDrive hardDrive \ , motherBoard motherBoard \ , powerSource powerSource \ , cpu cpu \ };}
}/*** 指挥者类*/
public class Director {// 声明builder类型的变量private Builder builder;public Director(Builder builder){this.builder builder;}// 组装电脑public Computer construct(){builder.builderMotherBoard();builder.builderCpu();builder.builderMemory();builder.builderHardDrive();builder.builderPowerSource();return builder.createComputer();}
}/*** 联想电脑构建者 实现抽象构建者类*/
public class LXComputerBuilder extends Builder{Overridepublic Computer createComputer() {return computer;}Overridepublic void builderMemory() {computer.setMemory(8G);}Overridepublic void builderHardDrive() {computer.setMemory(512G);}Overridepublic void builderMotherBoard() {computer.setMotherBoard(一块好板);}Overridepublic void builderPowerSource() {computer.setPowerSource(600w);}Overridepublic void builderCpu() {computer.setCpu(i5);}
}/*** 惠普电脑构建者 实现抽象构建者类*/
public class PHComputerBuilder extends Builder{Overridepublic Computer createComputer() {return computer;}Overridepublic void builderMemory() {computer.setMemory(16G);}Overridepublic void builderHardDrive() {computer.setHardDrive(512G);}Overridepublic void builderMotherBoard() {computer.setMotherBoard(普通的主板);}Overridepublic void builderPowerSource() {computer.setPowerSource(500w);}Overridepublic void builderCpu() {computer.setCpu(i7);}
}public class Test01 {public static void main(String[] args) {// 创建指挥者类传入惠普电脑构建者类Director director new Director(new PHComputerBuilder());// 调用指挥者类的构建方法构建惠普电脑Computer construct director.construct();System.out.println(construct.toString());}
}结果 优缺点
优点 建造者模式的封装性很好。使用建造者模式可以有效的封装变化在使用建造者模式的场景中一般产品类和建造者类是比较稳定的因此将主要的业务逻辑封装在指挥者类中对整体而而言可以取得比较好的稳定性。在建造者模式中客户端不必知道产品内部组成的细节将产品本身与产品的创建过程解耦使得相同的创建过程可以创建不同的产品对象。可以更加精细的控制产品的创建过程。将复杂产品的创建步骤分解在不同的方法中使得创建过程更加清晰也方便使用程序来控制创建过程。建造者模式很容易进行扩展。如果由新的需求通过实现一个新的建造者类就可以完成基本上不用修改之前的代码符合开闭原则。 缺点 建造者模式所创建的产品一般具有较多共同点其组成部分相似如果产品之间差异很大则不适用建造者模式因此使用范围受到一定的限制。
使用场景
建造者Builder模式创建的是复杂对象其产品的各个部分经常面临剧烈的变化但是将他们组合在一起的算法却相对稳定所有通常在一下场合使用
创建的对象较复杂由多个部件构成各部件面临复杂变化但构建顺序是相对稳定的创建复杂对象的算法独立于该对象的组成部分以及它们的装配方式即产品的构建过程和最终的表示是独立的
将上述案例改为链式调用 /*** 电脑类*/
public class Computer {private String memory;private String hardDrive;private String motherBoard;private String powerSource;private String cpu;// 构造方法public Computer(Builder builder) {this.cpu builder.cpu;this.hardDrive builder.hardDrive;this.motherBoard builder.motherBoard;this.powerSource builder.powerSource;this.memory builder.memory;}// 将创建者声明为静态内部类public static final class Builder {private String memory;private String hardDrive;private String motherBoard;private String powerSource;private String cpu;public Builder cpu(String cpu){this.cpu cpu;return this; // 直接返回 this即 Builder对象}public Builder powerSource(String powerSource){this.powerSource powerSource;return this;}public Builder motherBoard(String motherBoard){this.motherBoard motherBoard;return this;}public Builder hardDrive(String hardDrive){this.hardDrive hardDrive;return this;}public Builder memory(String memory){this.memory memory;return this;}// 直接调用Computer类的构造方法传入this即 Builder对象public Computer build(){return new Computer(this);}}Overridepublic String toString() {return Computer{ memory memory \ , hardDrive hardDrive \ , motherBoard motherBoard \ , powerSource powerSource \ , cpu cpu \ };}
}public class Test02 {public static void main(String[] args) {Computer computer new Computer.Builder().cpu(i9).hardDrive(2T).memory(32G).powerSource(1000w).motherBoard(华硕).build();System.out.println(computer);}
}结果