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"火车产品..."; } }