创建者模式

本文介绍了建造者模式的基本概念,包括其涉及的角色如抽象创建者、具体创建者、指导者及产品等。并通过一个实例展示了如何使用建造者模式来创建不同类型的餐食对象,帮助读者理解该模式的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、创建模式涉及角色

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());
    }
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值