设计模式—建造者模式

1、简介

建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。根据中文翻译的不同,建造者模式又可以称为生成器模式。

2、示例

设备更新完成了,每个车间配置了一个工程师,指导使用新设备制作手机工程。

3、角色

建造者(Builder):给出一个抽象接口,以规范产品对象的各个组成成分的建造。具体建造者类必须实现这个接口所要求的方法:一个是建造方法,另一个是结果返还方法。

具体建造者(Concrete Builder):这个角色主要完成的任务包括:

  • 实现Builder角色提供的接口,一步一步完成创建产品实例的过程。
  • 在建造过程完成后,提供产品的实例。

指导者(Director):担任这个角色的类调用具体建造者角色以创建产品对象。指导者并没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者对象。

产品(Product):产品便是建造中的复杂对象。

4、具体实现

/**
 * @Description: 手机制造抽象类
 * @Author: vesus
 * @CreateDate: 2018/11/23 下午4:45
 * @Version: 1.0
 */
public abstract class Builder {

    /**
     * 组装手机配件
     */
    abstract void builderpart();

    /**
     * 组装手机屏幕
     */
    abstract void builderscreen();

    /**
     * 组装手机壳
     */
    abstract void buildkey();
}

/**
 * @Description: 具体的手机制造类---工人
 * @Author: vesus
 * @CreateDate: 2018/11/23 下午4:52
 * @Version: 1.0
 */
public class PhoneBuilder extends Builder {

    //持有一个产品的引用
    Phone phone ;

    public PhoneBuilder() {
        this.phone = new Phone();
    }

    void builderpart() {
        phone.add("组装元件");
    }

    void builderscreen() {
        phone.add("组装屏幕");
    }

    void buildkey() {
        phone.add("组装手机壳");
    }

    public Phone getPhone() {
        return phone;
    }
}

/**
 * @Description: 产品--手机
 * @Author: vesus
 * @CreateDate: 2018/11/23 下午4:38
 * @Version: 1.0
 */
public class Phone {

    public Object add;
    //手机配件组合
    private List<String> parts = new ArrayList<String>();
    //将手机配件组装到手机
    public void add (String part){
        parts.add(part);
    }
    //展示整个组装过程
    public void show(){
        for (String part : parts) {
            System.out.println("已经"+part+"到手机里面!");
        }
    }
}

/**
 * @Description: 指导者-车间工程师
 * @Author: vesus
 * @CreateDate: 2018/11/23 下午5:03
 * @Version: 1.0
 */
public class Director {

    //持有工人的引用,指导工程完成制作
    Builder builder ;

    public Director(Builder builder) {
        this.builder = builder;
    }

    public void product(){
        builder.builderpart();
        builder.builderscreen();
        builder.buildkey();
    }
}

/**
 * @Description: 客户
 * @Author: vesus
 * @CreateDate: 2018/11/23 下午5:06
 * @Version: 1.0
 */
public class phoneclient {
    public static void main(String[] args) {
        Builder builder = new PhoneBuilder();
        Director director = new Director(builder);
        director.product();

        //拿到安装好的手机给客户展示
        Phone phone = ((PhoneBuilder) builder).getPhone();
        phone.show();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值