建造者模式
Separate the construction of a complexobject from its representation so that the same construction process can createdifferent representations.
讲一个复杂对象的构建于它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者中设计四个角色
抽象建造者(Builder)角色:该角色用于规范产品各个组成部分,并进行抽象,一般独立于应用程序的逻辑。
具体建造者(Concrete Bulider)角色;该角色实现抽象建造者中定义了所有方法,并且返回一个组建好的实例。
产品(Product)角色;该角色是建造中的复杂对象,一个系统中会有多余一个的产品类,这些产品类并不一定有共同的接口,完全可以是不相关连的。
导演者(Director)角色:该角色安排已有模块的顺序,然后告诉Bulider开始建造.
建造者模式的应用
1建造者模式的优点
封装性,使用建造者模式可以使客户端不必知道产品内部组成的细节
建造者独立,容易扩展
便于控制细节风险,由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
2建造者模式的使用场景
相同的方法,不同的执行顺序,产生不同的结果时,可以采用建造者模式
多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时,则可以使用该模式。
产品类非常复杂,或者产品类中的方法调用顺序不同,产生了不同的效能,这个时候使用建造者模式。
在对象创建过程中会使用到系统的一些其他对象,这些对象在产品对象的创建过程中不宜得到时,也可以采用建造者模式封装该对象的创建过程。该种场景智能是一个补偿方法,因为一个对象不容易获得,而在设计阶段没有发现,要通过创建者模式柔化创建过程,本省已经违反了设计的最初目标。
创建者模式关注的是零件类型和装配工艺顺序,这与工厂方法模式最大的不同之处,虽为创建者模式,但是重点不同。
public abstract class Computer {
private String type;
private String cpu;
private String ram;
private String hardDisk;
private String monitor;
private String os;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getCpu() {
return cpu;
}
public void setCpu(String cpu) {
this.cpu = cpu;
}
public String getRam() {
return ram;
}
public void setRam(String ram) {
this.ram = ram;
}
public String getHardDisk() {
return hardDisk;
}
public void setHardDisk(String hardDisk) {
this.hardDisk = hardDisk;
}
public String getMonitor() {
return monitor;
}
public void setMonitor(String monitor) {
this.monitor = monitor;
}
public String getOs() {
return os;
}
public void setOs(String os) {
this.os = os;
}
}
public interface Computerbulider {
void bulidCpu();
void bulidRam();
void bulidHarddisk();
void bulidGraphicCard();
void bulidMonitor();
void bulidOs();
Computer getResule();
}
public class T410 extends Computer {
private String graphicCard;//显卡
public String getGraphicCard() {
return graphicCard;
}
public void setGraphicCard(StringgraphicCard) {
this.graphicCard = graphicCard;
}
public T410(){
this.setType("ThinkpadT410i");
}
public String toString(){
return "型号: \t"+this.getType()+"\nCPU:\t"+this.getCpu()
+"\n内存:\t"+this.getRam()+"\n硬盘:\t"+this.getHardDisk()
+"\n显卡:\t"+this.getGraphicCard()+"\n显示器\t"
+this.getMonitor()+"\n操作系统"+this.getOs();
}
}
public class X201 extends Computer {
public X201(){
this.setType("ThinkpadT410i");
}
public StringtoString(){
return "型号: \t"+this.getType()+"\nCPU:\t"+this.getCpu()
+"\n内存:\t"+this.getRam()+"\n硬盘:\t"+this.getHardDisk()
+"\n显示器\t"
+this.getMonitor()+"\n操作系统"+this.getOs();
}
}
public class T410Bulider implements Computerbulider {
private T410 computer =new T410();
@Override
public void bulidCpu() {
// TODO Auto-generatedmethod stub
computer.setCpu("i5-450");
}
@Override
public void bulidRam() {
// TODO Auto-generatedmethod stub
computer.setRam("4G 1333MHZ");
}
@Override
public void bulidHarddisk() {
// TODO Auto-generatedmethod stub
computer.setHardDisk("200G");
}
@Override
public void bulidGraphicCard() {
// TODO Auto-generatedmethod stub
computer.setGraphicCard("Nvidia NVS 3100M");
}
@Override
public void bulidMonitor() {
// TODO Auto-generatedmethod stub
computer.setMonitor("14英寸1280*800");
}
@Override
public void bulidOs() {
// TODO Auto-generatedmethod stub
computer.setOs("Win7");
}
@Override
public Computer getResule() {
// TODO Auto-generatedmethod stub
return computer;
}
}
public class X201Bulider implements Computerbulider {
private X201 computer =new X201();
@Override
public void bulidCpu() {
// TODO Auto-generatedmethod stub
computer.setCpu("i3-450");
}
@Override
public void bulidRam() {
// TODO Auto-generatedmethod stub
computer.setRam("2G1333MHZ");
}
@Override
public void bulidHarddisk() {
// TODO Auto-generatedmethod stub
computer.setHardDisk("250G");
}
@Override
public void bulidMonitor() {
// TODO Auto-generatedmethod stub
computer.setMonitor("12英寸 1280*800");
}
@Override
public void bulidOs() {
// TODO Auto-generatedmethod stub
computer.setOs("Mac");
}
@Override
public Computer getResule() {
// TODO Auto-generatedmethod stub
return computer;
}
@Override
public void bulidGraphicCard() {
// TODO Auto-generatedmethod stub
}
}
public class ComputerDirector {
Computerbulider bulider;
//构造T410型计算机
public T410 constructT410(){
bulider=new T410Bulider();
bulider.bulidCpu();
bulider.bulidRam();
bulider.bulidHarddisk();
bulider.bulidGraphicCard();
bulider.bulidMonitor();
bulider.bulidOs();
return (T410)bulider.getResule();
}
//构造X201型计算机
public X201constructX201(){
bulider=new X201Bulider();
bulider.bulidCpu();
bulider.bulidRam();
bulider.bulidHarddisk();
bulider.bulidGraphicCard();
bulider.bulidMonitor();
bulider.bulidOs();
return (X201)bulider.getResule();
}
}
public class ComputerTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generatedmethod stub
ComputerDirector director=new ComputerDirector();
Computer t410=director.constructT410();
System.out.println(t410);
System.out.println("------------------------------------------");
Computer x201=director.constructX201();
System.out.println(x201);
}
}