> 文档中心 > 建造者模式

建造者模式


简述

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
分离了对象子组件的单独构造(由Builder来负责)和装配(由Director负责)。 从而可以构 造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使用。

代码描述

- 手机类

public class Phone {    private Screen screen;    private Shell shell;    private Cpu cpu;    public Screen getScreen() { return screen;    }    public void setScreen(Screen screen) { this.screen = screen;    }    public Shell getShell() { return shell;    }    public void setShell(Shell shell) { this.shell = shell;    }    public Cpu getCpu() { return cpu;    }    public void setCpu(Cpu cpu) { this.cpu = cpu;    }}

- 手机构成组件的三个类

public class Cpu {    private String cname;    public Cpu(String cname) { this.cname = cname;    }    public String getCname() { return cname;    }    public void setCname(String cname) { this.cname = cname;    }}
public class Screen {    private String sname;    public Screen(String sname) { this.sname = sname;    }    public String getSname() { return sname;    }    public void setSname(String sname) { this.sname = sname;    }}
public class Shell {    private String sname;    public Shell(String sname) { this.sname = sname;    }    public String getSname() { return sname;    }    public void setSname(String sname) { this.sname = sname;    }}

- 建造者

public interface Builder {    Cpu createCpu(String name);    Screen createScreen(String name);    Shell createShell(String name);}
public class PBuilder implements Builder {    @Override    public Cpu createCpu(String name) { return new Cpu(name);    }    @Override    public Screen createScreen(String name) { return new Screen(name);    }    @Override    public Shell createShell(String name) { return new Shell(name);    }}
  • 工厂
public interface Factory {    Phone createPhone();}
public class PhoneFactory implements Factory {    private Builder builder;    public PhoneFactory(Builder builder) { this.builder = new PBuilder();    }    @Override    public Phone createPhone() { Cpu cpu = builder.createCpu("麒麟9000"); Screen screen = builder.createScreen("三星OLED"); Shell shell = builder.createShell("P40外壳"); Phone p40 = new Phone(); p40.setCpu(cpu); p40.setScreen(screen); p40.setShell(shell); return p40;    }}