设计模式--建造者模式

建造者模式

基本介绍

1)建造者模式又叫生成器模式,是一种对象构建模式,他可以将复杂对象的建造过程抽象出来,使用这个抽象过程的不同实现方法可以构造出不同表现的对象。

2)建造者模式是一步一步的创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建他们,用户不需要知道内部的具体构建细节

建造者模式的四个角色

1)Produce(产品角色):一个具体的产品对象

2)Builder(抽象建造者):创建一个Produce对象的各个部件指定的接口/抽象类

3)ConcreateBuilder(具体建造者):实现接口,构建和装配各个部件

4)Director(指挥者):构建一个使用Builder接口的对象,它主要适用于创建一个复杂的对象,它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程

建造者模式的注意事项和细节

1)客户端不必知道产品内部组成细节

2)具体的建造类之间是相互独立的,对系统扩展非常有利,但是如果内部特别复杂,会有很多的建造类

3)由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响

类图

img

示例代码
package com.example.demo.design.builder;

public class KFC {

    /**
     * 必买商品
     */
    private String hambuger;
    private String chips;

    /**
     * 选购商品
     */
    private String chicken;
    private String cola;
    private String pizza;

    public KFC(String hambuger,String chips){
        this.hambuger = hambuger;
        this.chips = chips;
    }

    public String getHambuger() {
        return hambuger;
    }

    public void setHambuger(String hambuger) {
        this.hambuger = hambuger;
    }

    public String getChips() {
        return chips;
    }

    public void setChips(String chips) {
        this.chips = chips;
    }

    public String getChicken() {
        return chicken;
    }

    public void setChicken(String chicken) {
        this.chicken = chicken;
    }

    public String getCola() {
        return cola;
    }

    public void setCola(String cola) {
        this.cola = cola;
    }

    public String getPizza() {
        return pizza;
    }

    public void setPizza(String pizza) {
        this.pizza = pizza;
    }

    @Override
    public String toString() {
        return "KFC{" +
                "hambuger='" + hambuger + '\'' +
                ", chips='" + chips + '\'' +
                ", chicken='" + chicken + '\'' +
                ", cola='" + cola + '\'' +
                ", pizza='" + pizza + '\'' +
                '}';
    }
}

package com.example.demo.design.builder;

public abstract class Builder {

   abstract Builder setChicken();
    abstract Builder setCola();
    abstract Builder setPizza();
    abstract KFC getKFC();
}

package com.example.demo.design.builder;

public class ConcreteBuilder extends Builder{

    KFC kfc;
    public ConcreteBuilder(String hamburger,String chips){
        kfc = new KFC(hamburger,chips);
    }

    @Override
    Builder setChicken() {
        kfc.setChicken("鸡腿");
        return this;
    }

    @Override
    Builder setCola() {
        kfc.setCola("可乐");
        return this;
    }

    @Override
    Builder setPizza() {
        kfc.setPizza("披萨");
        return this;
    }

    @Override
    KFC getKFC() {
        return kfc;
    }
}

package com.example.demo.design.builder;

public class Client {
    public static void main(String[] args) {
        KFC kfc = new ConcreteBuilder("鸡腿堡","大薯").setChicken().setCola().getKFC();
        System.out.println(kfc.toString());

        System.out.println("-------------");
        KFC kfc1 = new ConcreteBuilder("鸡腿堡","大薯").setChicken().setCola().setPizza().getKFC();
        System.out.println(kfc1.toString());
    }
}

结果

在这里插入图片描述

建造者模式在jdk中的应用分析

StringBuilder运用了建造者模式

在这里插入图片描述

在这里插入图片描述

(该图来自csdn https://blog.csdn.net/sinat_35821285/article/details/80004060)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值