Bike
- package com.jmj.pattern.builder.demo01;
-
- public class Bike {
-
- private String frame;//车架
- private String seat;//车座
-
- public String getFrame() {
- return frame;
- }
-
- public void setFrame(String frame) {
- this.frame = frame;
- }
-
- public String getSeat() {
- return seat;
- }
-
- public void setSeat(String seat) {
- this.seat = seat;
- }
-
- @Override
- public String toString() {
- return "Bike{" +
- "frame='" + frame + '\'' +
- ", seat='" + seat + '\'' +
- '}';
- }
- }
Builder
- package com.jmj.pattern.builder.demo01;
-
- public abstract class Builder {
-
- //声明bike类型的变量,并进行复制
- protected Bike bike=new Bike();
-
- public abstract void buildFrame();
-
- public abstract void buildSeat();
-
-
- public abstract Bike createBike();
-
-
- }
MobileBuilder
- package com.jmj.pattern.builder.demo01;
- //具体的构建者,用来构建摩拜单车对象
- public class MobileBuilder extends Builder{
- @Override
- public void buildFrame() {
- bike.setFrame("碳纤维车架");
- }
-
- @Override
- public void buildSeat() {
- bike.setSeat("真皮车座");
- }
-
- @Override
- public Bike createBike() {
- return bike;
- }
- }
OfoBuilder
- package com.jmj.pattern.builder.demo01;
-
- public class OfoBuilder extends Builder{
- @Override
- public void buildFrame() {
- bike.setFrame("铝合金车架");
- }
-
- @Override
- public void buildSeat() {
- bike.setSeat("橡胶车座");
- }
-
- @Override
- public Bike createBike() {
- return bike;
- }
- }
Director
- package com.jmj.pattern.builder.demo01;
-
- public class Director {
-
- //声明builder类型的变量
- private Builder builder;
-
- public Director(Builder builder) {
- this.builder = builder;
- }
-
- //组装自行车
- public Bike construct(){
- builder.buildFrame();
- builder.buildSeat();
- return builder.createBike();
- }
- }
Client
- package com.jmj.pattern.builder.demo01;
-
- public class Client {
- public static void main(String[] args) {
- //创建指挥者对象
- Director director = new Director(new OfoBuilder());
- //让指挥者指挥组装自行车
- Bike construct = director.construct();
- System.out.println(construct);
-
- }
- }
另一种建造者模式
- package com.jmj.pattern.builder.demo02;
-
-
-
- public class Phone {
- private String cpu;
- private String screen;
- private String memory;
- private String mainboard;
-
- private Phone(Builder builder){
- this.cpu = builder.cpu;
- this.screen = builder.screen;
- this.memory = builder.memory;
- this.mainboard = builder.mainboard;
-
- };
-
- @Override
- public String toString() {
- return "Phone{" +
- "cpu='" + cpu + '\'' +
- ", screen='" + screen + '\'' +
- ", memory='" + memory + '\'' +
- ", mainboard='" + mainboard + '\'' +
- '}';
- }
-
- public static final class Builder{
- private String cpu;
- private String screen;
- private String memory;
- private String mainboard;
-
- public Builder cpu(String cpu){
- this.cpu=cpu;
- return this;
- }
-
- public Builder screen(String screen){
- this.screen=screen;
- return this;
- }
-
- public Builder memory(String memory){
- this.memory=memory;
- return this;
- }
-
- public Builder mainboard(String mainboard){
- this.mainboard=mainboard;
- return this;
- }
- //使用构建者创建Phone对象
- public Phone build(){
- return new Phone(this);
- }
- }
-
-
- }
- package com.jmj.pattern.builder.demo02;
-
- public class Client {
- public static void main(String[] args) {
- //创建手机对象
- Phone.Builder builder = new Phone.Builder();
- Phone build = builder.cpu("英特尔").mainboard("华硕").memory("金士顿").screen("hkc").build();
- System.out.println(build);
- }
- }