建造者模式
简述
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
分离了对象子组件的单独构造(由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; }}