创建者模式


一、创建模式涉及角色

1.抽象创建者角色(Builder):为创建一个产品对象的各个组件指定抽象接口。

2.具体创建者角色(ConcreteBuilder):实现抽象builder接口以构造和装配产品的各个组件,定义并明确它所创建的表示,并提供一个检索产品的接口。
                                                            包含构造和创建一个产品的所有代码。

3.指导者(Director):构造一个使用Builder接口的对象,指导构建过程。

4.产品(Product):表示被构造的复杂对象。ConcreteBuilder创建改成产品

创建者模式


二、在什么情况下使用建造模式

  1. 需要生成的产品对象有复杂的内部结构,每一个内部成分本身可以是对象,也可以仅仅是一个对象(即产品对象)的一个组成部分。
  2. 创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时。
  3.构造过程必须允许被构造的对象有不同的表示时。

三、实例代码


public interface Builder {
    public void createPartA();
    public void createPartB();
    public void createPartC();
    public Food createFood();
}



public class ChilderFoodBuilder implements Builder {
    Food food;
    
    public ChilderFoodBuilder() {        
           this.food = new Food();
    }
    @Override
    public void createPartA() {
       System.out.println("创建的是儿童餐-A部分");      
    }
    @Override
    public void createPartB() {
       System.out.println("创建的是儿童餐-B部分");          
    }
    @Override
    public void createPartC() {
       System.out.println("创建的是儿童餐-C部分");          
    }
    @Override
    public Food createFood() {       
       return food;
    }
}


public class WomenFoodBuilder implements Builder {
    Food food ;
    
    public WomenFoodBuilder() {      
       this.food = new Food();
    }
    @Override
    public void createPartA() {
       System.out.println("创建的是适合女士的减肥餐-A");
    }
    @Override
    public void createPartB() {
       System.out.println("创建的是适合女士的减肥餐-B");
    }
    @Override
    public void createPartC() {
       System.out.println("创建的是适合女士的减肥餐-C");
    }
    @Override
    public Food createFood() {       
       return food;
    }
}



public class Food {
    private String partA;
    private String partB;
    private String partC;
    public String getPartA() {
       return partA;
    }
    public void setPartA(String partA) {
       this.partA = partA;
    }
    public String getPartB() {
       return partB;
    }
    public void setPartB(String partB) {
       this.partB = partB;
    }
    public String getPartC() {
       return partC;
    }
    public void setPartC(String partC) {
       this.partC = partC;
    }
}




public class Director {
    public Food createDiffTypeFood(Builder bu){
       bu.createPartA();
       bu.createPartB();
       bu.createPartC();
       return bu.createFood();
    }
}


public class Test {
    public static void main(String args[]) {
       Director director = new Director();
       director.createDiffTypeFood(new ChilderFoodBuilder());
       director.createDiffTypeFood(new WomenFoodBuilder());
    }
}