建造者模式

1.使用场景:建造一个复杂的产品。

2.建造者模式的本质:分离了对象子组件 单独构造,从而造出复杂的对象。由于实现了构建和装配的的解耦。不同建造者,相同的装配,也可以做出不同的对象。

3.使用案例解释:

 案例概述:我们建造汽车,汽车有桌椅、轮胎和方向盘组成,我们将他们组装成汽车。

(1)首先从车入手,他需要桌椅、轮胎和方向盘。

package ke.test.gzz;

/*
 * 创建汽车
 * 我们需要轮胎座椅和方向盘
 * 
 */

public class Car {
    private FangXpan fangXpan;
    private Zhuoyi zhuoyi;
    private LunTai lunTai;
    public FangXpan getFangXpan() {
        return fangXpan;
    }
    public void setFangXpan(FangXpan fangXpan) {
        this.fangXpan = fangXpan;
    }
    public Zhuoyi getZhuoyi() {
        return zhuoyi;
    }
    public void setZhuoyi(Zhuoyi zhuoyi) {
        this.zhuoyi = zhuoyi;
    }
    public LunTai getLunTai() {
        return lunTai;
    }
    public void setLunTai(LunTai lunTai) {
        this.lunTai = lunTai;
    }
}

我们使用了方向盘等组件,这个时候我们创建出各个组件

轮胎类:

package ke.test.gzz;
/*
轮胎类
*/
public class LunTai { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public LunTai(String name) { this.name = name; } }

桌椅类:

package ke.test.gzz;

public class Zhuoyi {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    public Zhuoyi(String name)
    {
        this.name =name;
    }

}

方向盘类:

package ke.test.gzz;

public class FangXpan {
    private String name ;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public FangXpan(String name) {
        this.name = name;
        
    }
}

(2)我们已经知道了自己想要啥,我们可以将他们创建出来,并且是需要啥,创建啥。

package ke.test.gzz;

public interface CarBuilder {
    public FangXpan fangXpan();
    public LunTai lunTai();
    public Zhuoyi zhuoyi();
}

我们创建出的东西需要组装

package ke.test.gzz;

public interface  CarDirect {
    Car createCar();

}

(3)实现各个方法创建具体的组件,将图纸变为实物。

package ke.test.gzz;

public class KwCarBuilder implements CarBuilder {

    @Override
    public FangXpan fangXpan() {
        // TODO Auto-generated method stub
        return new FangXpan("kwtest");
    }

    @Override
    public LunTai lunTai() {
        // TODO Auto-generated method stub
        return new LunTai("kwluntai");
    }

    @Override
    public Zhuoyi zhuoyi() {
        // TODO Auto-generated method stub
        return new Zhuoyi("kwzhuoyi"); 
    }

}

(4)实物有了按照图纸将其变为汽车

package ke.test.gzz;

public class KwCarDirect implements CarDirect{

    private CarBuilder carBuilder;
    
    public void setCarBuilder(CarBuilder carBuilder) {
        carBuilder = carBuilder;
    }

    @Override
    public Car createCar() {
        // TODO Auto-generated method stub
        Zhuoyi zhuoyi = carBuilder.zhuoyi();
        FangXpan fangXpan = carBuilder.fangXpan();
        LunTai lunTai = carBuilder.lunTai();
        
        Car car= new Car();
        car.setFangXpan(fangXpan);
        car.setLunTai(lunTai);
        car.setZhuoyi(zhuoyi);
        
        return car;
    }

}

我们这个时候就将需要的实体创建出来了,上面的逻辑也是写代码的逻辑。

 

posted @ 2018-03-15 17:52  kwdeep  阅读(174)  评论(0编辑  收藏  举报