建造者模式(Builder Pattern)

来源:互联网 发布:国外有类似淘宝吗 编辑:程序博客网 时间:2024/05/22 12:09


 
   Separate the construction of a complex object from its representation so
that the same construction process can create different representation.
  在这模式中,我们可以把导演者可以看成是一个工程师,把抽象建造者可以看成是一个原

料加工者,而把具体建造者看成是施工队,而把产品可以看成是一个楼房。
 
  抽象建造者(Builder)角色: 该角色用于规范产品的各个组成部分,并进行抽象。一般

独立于应用程序逻辑。
 public abstract class Builder
{
public abstract void method1();
public abstract void method2();
public abstract void method3():

}
  集体建造者(Concrete Builder)角色:该角色实现抽象建造者中定义的所有方法,并

且返回一个产品实例。
public class ConcreteBuilder
{
public void method1()
{
System.out.println("地基完成");
}
public void method2()
{
System.out.println("大框架完成");
}
public void method3()
{
System.out.println("装潢完成");
}
}
  产品角色(Product):该角色是建造者中的复杂对象,一个系统中会有多余一个产品类,

这些产品并不一定有公共的接口,完全可以是不相关联的。
public class Product
{

}
   导演者角色(Director):该角色负责已有模块顺序。然后告诉建造者开始建造。

public class Director
{
Builder  builder = new ConcreteBuilder();
public Product build()
{
builder.method1();
builder.method2();
builder.method3();

return builder.builderProduct();
}
}
 

示例:
package com.builderpattern;

public  abstract  class Computer
{
//定义机型
private String type;
//定义CPU
private String cpu;
//定义内存
private String ram;
//定义硬盘
private String hardDisk;
//定义显示器
private String monitor;
//定义操作系统
private String os;
//get和set  方法
/*
public String getType()
{
return type; 
}
public void setType(String type)
{
this.type = type;  
}
*/
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;
}
}


package com.builderpattern;

public class T410 extends Computer
{
 //定义 显卡
private String graphicsCard;
public T410()
{
 this.setType("ThinkPad T410");
}
public String getGraphicsCard()
{
return graphicsCard; 
}
public void setGraphicsCard(String graphicsCard)
{
this.graphicsCard = graphicsCard; 
}
@Override
 public String toString()
 {
  // TODO Auto-generated method stub
  return "型号:\t" +this.getType()+"\nCPU:\t"+this.getCpu

()+"\n内存:\t"+this.getRam()+"\n硬盘\t"+this.getHardDisk()+"\n显卡:

\t"+this.getGraphicsCard()+"\n显示器:\t"+this.getMonitor()+"\n操作系统

\t:"+this.getOs();
 }
}

package com.builderpattern;

public class X201 extends Computer
{
public X201()
{
this.setType("ThinkPad X201i"); 
}
@Override
 public String toString()
 {
  return "型号:\t"+this.getType() +"\nCPU:\t"+this.getCpu

()+"\n内存:\t"+this.getRam()+"\n硬盘:\t"+this.getHardDisk()+"\n显示器:

\t"+this.getMonitor()
    +"\n操作系统\t"+this.getOs();
 }
}

package com.builderpattern;

public interface ComputerBuilder
{
 //建造Cpu
void buildCpu();
 //建造Ram
void buildRam();
//建造硬盘
void buildHardDisk();
//建造显示器
void buildMinitor();
//建造显卡
void buildGraphicsCard();
//建造操作系统
void buildOs();
//得到建造好的计算机
Computer getResult();
}


package com.builderpattern;

public class T410Builder implements ComputerBuilder
{
private T410  computer = new T410();
@Override
 public void buildCpu()
 {
  computer.setCpu("i5-450");
  
 }
 @Override
 public void buildGraphicsCard()
 {
  computer.setHardDisk("Nvidia NVs 3100M");
  
 }
   @Override
 public void buildMinitor()
 {
 computer.setMonitor("14英寸 1800*1200");
 
 }
   @Override
 public void buildRam()
 {
  computer.setRam("4GB 1333Mhz");
 }
   @Override
 public void buildOs()
 {
  computer.setOs("Windows 7 旗舰版");
  
 }
   @Override
 public void buildHardDisk()
 {
 computer.setHardDisk("500GB 7200转");
 }
   @Override
 public Computer getResult()
 {
  
  return computer;
 }
}


package com.builderpattern;

public class X201Builder implements ComputerBuilder
{
private X201 computer = new X201();
public  void buildCpu()
{
 computer.setCpu("i2 -400");
}
@Override
 public void buildGraphicsCard()
 {
 

 }
@Override
 public void buildHardDisk()
 {
  computer.setHardDisk("500GB 3600转");
 }
@Override
 public void buildMinitor()
 {
  computer.setMonitor("14英寸 1200 * 1000");
  
 }
@Override
 public void buildOs()
 {
  computer.setOs("Windows 家庭版");
 }
@Override
 public void buildRam()
 {
 computer.setRam("2GB ");
 }
 @Override
 public X201 getResult()
 {
  return computer;
 }
}


package com.builderpattern;

public class ComputerDirector
{
  ComputerBuilder builder;
 
  //构造T410 行计算机
  public T410 constructT410()
  {
   builder = new T410Builder();
   builder.buildCpu();
   builder.buildGraphicsCard();
   builder.buildHardDisk();
   builder.buildMinitor();
   builder.buildOs();
   builder.buildRam();
   return (T410)builder.getResult();
  }
  //构造X201型计算机
  public X201 constructX201()
  {
   builder = new X201Builder();
   builder.buildCpu();
   builder.buildGraphicsCard();
   builder.buildHardDisk();
   builder.buildMinitor();
   builder.buildOs();
   builder.buildRam();
   return (X201)builder.getResult();
  
  }
}

package com.builderpattern;

public class ComputerTest
{
 public static void main(String[] args)
{
 ComputerDirector director = new ComputerDirector();
 Computer t410 = director.constructT410();
 System.out.println(t410);
 
 Computer x201 = director.constructX201();
 System.out.println(x201);
 
}
}


 

原创粉丝点击