您的位置:首页 > 其它

设计模式学习笔记(5)建造者模式

2013-04-24 19:17 393 查看
建造者模式

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
df3a
.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);
    }
 
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: