linkin大话设计模式--建造模式

linkin大话设计模式--建造模式


建造模式是对象的创建模式,可以讲一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。


建造模式的结构:

抽象建造者角色(Builder):给出一个抽象的接口,用来规范产品对象的各个组成成分的建造。

具体建造者角色(ConcreteBuilder):

1.实现抽象建造者所申明的接口,给出一步一步地完成创建产品实例的操作。

2.在建造过程完成后,提供产品的实例。

导演者角色(Director):用来调用具体建造者以创建产品对象。

产品角色(Product):要建造的对象。


在什么情况下使用建造模式?个人觉得有点绕,没有多少体会。。。
1.需要生成的产品对象有复杂的内部结构。每一个内部成分本身可以是对象,也可以仅仅是一个对象的一个组成成分。
2.需要生成的产品对象的属性互相依赖。
3.在对象创建过程中会使用到系统中的其他一些对象,这些对象在产品的创建过程中不易得到。

代码如下:

public class MyCarTest {
    public static void main(String[] args) {
        //建造模式  指定一个导演 然后创建出不同的产品
        Director d=new Director();
        Car car=d.buildCar();
        System.out.println(car);
        Train train=d.buildTrain();
        System.out.println(train);
    }

}

//导演者角色 直接暴露给客户端创建自己的产品
class Director {
    private BuildeCar bc=new BuilderCar();
    private BuildeTrain bt=new BuilderTrain();
    //命令造汽车
    public Car buildCar(){
        bc.carPart1();
        bc.carPart2();
        bc.carPart3();
        Car car=bc.carOver();
        return car;
    }
    
    //命令造火车
    public Train buildTrain(){
        bt.trainPart();
        bt.loco();
        Train train=bt.trainOver();
        return train;
    }
    
}

//对火车来说 抽象建造者角色接口
interface BuildeTrain{
    
    public void trainPart();
    public void loco();
    public Train trainOver();
}

//对汽车来说 抽象建造者角色接口
interface BuildeCar{
  
    public abstract void carPart1();
    public abstract void carPart2();
    public abstract void carPart3();
    public abstract Car carOver();
}

class BuilderTrain implements BuildeTrain{
    private Train train=new Train();
    public  void trainPart(){
        System.out.println("火车的车厢造好了...");
    }
    public  void loco(){
        System.out.println("火车头造好了...");
    }
    public  Train trainOver(){
        return train;
    }
}

class BuilderCar implements BuildeCar{
    private Car car=new Car();
    public void carPart1(){
        System.out.println("汽车的框架完成了...");
    }
    public void carPart2(){
        System.out.println("汽车的底盘完成了...");
    }
    public void carPart3(){
        System.out.println("汽车的轮胎完成了...");
    }
    public Car carOver(){
        return car;
    }
}

class Car {
    public String toString (){
        return "汽车产品...";
    }
}

class Train {
    public String toString(){
        return"火车产品...";
    }
}

原文地址:https://www.cnblogs.com/LinkinPark/p/5233183.html