设计模式——建造者模式

什么是建造者模式

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(即产品)。

 

建造者模式的角色

Builder:抽象建造者,定义建造产品零部件的方法

ConcreteBuilder:具体建造者,实现建造零部件的方法

Director:指挥官,决定使用哪种建造者创建产品

Product:产品类

../_images/Builder.jpg

 

实例:

Builder:

public interface Builder {
    void BulidePartA();
    void BulidePartB();
    void BuildePartC();
    Product getProduct();
}

Product:

public class Product {
    private String partA;
    private String partB;
    private String partC;

    public Product(String partA, String partB, String partC) {
        this.partA = partA;
        this.partB = partB;
        this.partC = partC;
    }
    
    public void display(){
        System.out.println(partA+"、"+partB+"、"+partC+"组成的汉堡");
    }
    
}

 

BuilderA:
 

public class BuilderA implements Builder{

    private String partA;
    private String partB;
    private String partC;
    
    @Override
    public void BulidePartA() {
        partA="牛肉";
    }

    @Override
    public void BulidePartB() {
        partB="培根";
    }

    @Override
    public void BuildePartC() {
        partC="面包";
    }

    @Override
    public Product getProduct() {
        return new Product(partA,partB,partC);
    }
    
}

 

BuilderB:
 

public class BuilderB implements Builder{

    private String partA;
    private String partB;
    private String partC;
    
    @Override
    public void BulidePartA() {
        partA="鸡肉";
    }

    @Override
    public void BulidePartB() {
        partB="生菜";
    }

    @Override
    public void BuildePartC() {
        partC="面包";
    }

    @Override
    public Product getProduct() {
        return new Product(partA,partB,partC);
    }
    
}

 

Director:
 

public class Director {
    private Builder builder;
    
    void setBuilder(Builder builder){
        this.builder=builder;
    }
    
    Product getProduct(){
         builder.BuildePartC();
         builder.BulidePartA();
         builder.BulidePartB();
         return builder.getProduct();
    }
}

 

main:
 

public class main {
    public static void main(String[] args){
        Director dire=new Director();
        dire.setBuilder(new BuilderA());
        Product A=dire.getProduct();
        A.display();
        
        dire.setBuilder(new BuilderB());
        Product B=dire.getProduct();
        B.display();        
        
    }
    
}

 

运行结果:

 

建造者模式的一点思考

优点:

建造者模式将对象的构建过程封装,用户只需要指定建造者即可获得对象,建造者模式把一个复杂对象看成由若干部分组成,使复杂对象的创建变得更加有条理,增加新的建造者无需修改现有代码,很好的满足了开闭原则

 

建造者模式与一系列工厂模式的不同:
建造者模式构建的一组对象一般具有相同的特征,比如奥迪和宝马车,两者都有轮子、方向盘等,工厂模式创建的一组对象的特征可以不同,建造者模式用于复杂对象的创建,它将复杂对象的创建分为几个步骤,依次执行这些步骤来创建对象,而工厂模式创建的对象较为简单,不需要划分创建步骤即可创建,至于一个对象是否复杂,由自己决定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值