创建者模式

来源:互联网 发布:emc测试 知乎 编辑:程序博客网 时间:2024/05/29 09:14

一、创建模式涉及角色

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

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

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

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




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

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

三、实例代码


publicinterface Builder {
    publicvoid createPartA();
    publicvoid createPartB();
    publicvoid createPartC();
    publicFood createFood();
}



publicclassChilderFoodBuilder implements Builder {
    Foodfood;
    
    publicChilderFoodBuilder() {        
           this.food= new Food();
    }
    @Override
    publicvoid createPartA() {
       System.out.println("创建的是儿童餐-A部分");      
    }
    @Override
    publicvoid createPartB() {
       System.out.println("创建的是儿童餐-B部分");          
    }
    @Override
    publicvoid createPartC() {
       System.out.println("创建的是儿童餐-C部分");          
    }
    @Override
    publicFood createFood() {       
       returnfood;
    }
}


publicclassWomenFoodBuilder implements Builder {
    Foodfood ;
    
    publicWomenFoodBuilder() {      
       this.food= new Food();
    }
    @Override
    publicvoid createPartA() {
       System.out.println("创建的是适合女士的减肥餐-A");
    }
    @Override
    publicvoid createPartB() {
       System.out.println("创建的是适合女士的减肥餐-B");
    }
    @Override
    publicvoid createPartC() {
       System.out.println("创建的是适合女士的减肥餐-C");
    }
    @Override
    publicFood createFood() {       
       returnfood;
    }
}



publicclassFood {
    privateStringpartA;
    privateStringpartB;
    privateStringpartC;
    publicString getPartA() {
       returnpartA;
    }
    publicvoid setPartA(String partA) {
       this.partA= partA;
    }
    publicString getPartB() {
       returnpartB;
    }
    publicvoid setPartB(String partB) {
       this.partB= partB;
    }
    publicString getPartC() {
       returnpartC;
    }
    publicvoid setPartC(String partC) {
       this.partC= partC;
    }
}




publicclassDirector {
    publicFood createDiffTypeFood(Builder bu){
       bu.createPartA();
       bu.createPartB();
       bu.createPartC();
       returnbu.createFood();
    }
}


publicclassTest {
    publicstatic void main(String args[]) {
       Director director =new Director();
       director.createDiffTypeFood(newChilderFoodBuilder());
       director.createDiffTypeFood(newWomenFoodBuilder());
    }
}


原创粉丝点击