简单易懂的建造者模式

一、建造者模式概念

建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可 以创建不同的表示。建造者模式是一种对象创建型模式。 建造者模式一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就 可以构建它们,用户不需要知道内部的具体构建细节

二、建造者模式角色介绍

在建造者模式结构图中包含如下几个角色:

● Builder(抽象建造者):它为创建一个产品Product对象的各个部件指定抽象接口,在该接 口中一般声明两类方法,一类方法是buildPartX(),它们用于创建复杂对象的各个部件;另一 类方法是getResult(),它们用于返回复杂对象。Builder既可以是抽象类,也可以是接口。

●ConcreteBuilder(具体建造者):它实现了Builder接口,实现各个部件的具体构造和装配方 法,定义并明确它所创建的复杂对象,也可以提供一个方法返回创建好的复杂产品对象。

●Product(产品角色):它是被构建的复杂对象,包含多个组成部件,具体建造者创建该产品 的内部表示并定义它的装配过程。 ●Director(指挥者):指挥者又称为导演类,它负责安排复杂对象的建造次序,指挥者与抽 象建造者之间存在关联关系,可以在其construct()建造方法中调用建造者对象的部件构造与装 配方法,完成复杂对象的建造。客户端一般只需要与指挥者进行交互,在客户端确定具体建 造者的类型,并实例化具体建造者对象(也可以通过配置文件和反射机制),然后通过指挥者类的构造函数或者Setter方法将该对象传入指挥者类中。

三、应用场景及案例

假定要开发一个网站,公司有两种开发方案,一队java开发者,一队.net开发者。

他们的故事就在下面:

public class Builder {
    public static void main(String[] args) {
        // 客户决定采用java开发
        JavaDever javaDever = new JavaDever();
        XiangMuZhuGuan xiangMuZhuGuan = new XiangMuZhuGuan();
        WebSite webSite = xiangMuZhuGuan.dev(javaDever);
        System.out.println(webSite.getFront()+"-"+webSite.getEnd());
        // 前端采用vue开发完成-后端采用Java开发完成
    }
}

class WebSite {
    // 前端开发
    private String front;
    // 后端开发
    private String end;

    public String getFront() {
        return front;
    }

    public void setFront(String front) {
        this.front = front;
    }

    public String getEnd() {
        return end;
    }

    public void setEnd(String end) {
        this.end = end;
    }
}

/**
 * 架构师
 */
abstract class JiaGouShi {
    WebSite webSite = new WebSite();

    public abstract void buildFront();
    public abstract void buildEnd();

    public WebSite kaiFaWebSite() {
        return webSite;
    }
}

/**
 * Java开发人员
 */
class JavaDever extends JiaGouShi{
    @Override
    public void buildFront() {
        webSite.setFront("前端采用vue开发完成");
    }

    @Override
    public void buildEnd() {
        webSite.setEnd("后端采用Java开发完成");
    }
}

/**
 * .net开发人员
 */
class NetDever extends JiaGouShi {
    @Override
    public void buildFront() {
        webSite.setFront("前端采用asp开发完成");
    }

    @Override
    public void buildEnd() {
        webSite.setEnd("后端采用net开发完成");
    }
}

/**
 * 项目主管
 */
class XiangMuZhuGuan{
    public WebSite dev(JiaGouShi jiaGouShi) {
        jiaGouShi.buildFront();
        jiaGouShi.buildEnd();
        return jiaGouShi.kaiFaWebSite();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值