建造者模式

使用场景:

  • 建造模式实在当创建对象的算法应该独立于对象的组成部分以及他们的装配方案时适用的模式。

优点:

  • 建造代码和表示代码分离,由于建造者隐藏了该产品的是如何组装的,所以需要退出类似的新产品的时候,只需要再定义一个具体的建造者就行了。

用例图:

这里写图片描述

代码实现:

package com.liran.main.DesignPattern.建造者模式;

import java.util.ArrayList;
import java.util.List;

/**
 * 建造者模式
 * Created by LiRan on 2016-02-19.
 */
public class Builder_Pattern {

    public static void main(String[] args) {

        Director director = new Director();

        Builder builderA = new ConcreateBuilderA();
        director.Construct(builderA);
        Product productA = builderA.getResult();
        productA.show();

        Builder builderB = new ConcreateBuilderB();
        director.Construct(builderB);
        Product productB = builderB.getResult();
        productB.show();

    }


}


class Director {

    public void Construct(Builder builder) {
        builder.BuildPatrA();
        builder.BuildPatrB();
    }


}

/**
 * Builder是为创建一个Product
 * 对象的各个部件制定的抽象接口
 */
abstract class Builder {

    public Builder() {
    }

    public abstract void BuildPatrA();

    public abstract void BuildPatrB();

    public abstract Product getResult();

}


class ConcreateBuilderA extends Builder {

    private Product product = new Product();

    @Override
    public void BuildPatrA() {
        product.addPart(" 部件A ");
    }

    @Override
    public void BuildPatrB() {
        product.addPart(" 部件B ");
    }

    @Override
    public Product getResult() {
        return product;
    }
}


class ConcreateBuilderB extends Builder {

    private Product product = new Product();

    @Override
    public void BuildPatrA() {
        product.addPart("部件X");
    }

    @Override
    public void BuildPatrB() {
        product.addPart("部件Y");
    }

    @Override
    public Product getResult() {
        return product;
    }
}

/**
 * 产品
 */
class Product {
    private List<String> data = new ArrayList<>();

    public void addPart(String part) {
        data.add(part);
    }

    public void show() {
        for (String part : data) {
            System.out.println("产品:" + part);
        }
    }

}


源码下载:Github

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值