建造者模式

建造者模式(Builder)

Builder模式是一种对象创建型模式,又叫生成器模式,用来隐藏符合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态的创建具有符合属性的对象。

1. 模式中包含的角色及其职责

1.1 产品(Product)

最后客户端需要获得的产品

Product

package com.liuyao;

import lombok.Data;
import lombok.ToString;

/**
 * @author liuyao
 * @date 2018/07/30
 */
@Data
@ToString
public class House {
    private String floor;
    private String wall;
    private String window;
}

1.2 抽象建造者(Builder)

抽象建造者负责提供建造产品的接口

HouseBuilder

package com.liuyao;

/**
 * @author liuyao
 * @date 2018/07/30
 */
public interface HouseBuilder {
     public void makeFloor();

     public void makeWall();

     public void makeWindow();

     public House getHouse();
}

1.3 具体建造者(Concrete Builder)

实现抽象建造者的建造接口,根据要建造不同的产品完成不同建造

PingFangBuilder

package com.liuyao;

/**
 * @author liuyao
 * @date 2018/07/30
 */
public class PingFangBuilder implements HouseBuilder {
    private House house=new House();
    @Override
    public void makeFloor() {
        house.setFloor("PingFang ==> Floor");
    }

    @Override
    public void makeWall() {
        house.setWall("PingFang ==> Wall");
    }

    @Override
    public void makeWindow() {
        house.setWindow("PingFang ==> Window");
    }

    @Override
    public House getHouse() {
        return house;
    }
}

GongYuBuilder

package com.liuyao;

/**
 * @author liuyao
 * @date 2018/07/30
 */
public class GongYuBuilder implements HouseBuilder {
    private House house=new House();
    @Override
    public void makeFloor() {
        house.setFloor("GongYu ==> Floor");
    }

    @Override
    public void makeWall() {
        house.setWall("GongYu ==> Wall");
    }

    @Override
    public void makeWindow() {
        house.setWindow("GongYu ==> Window");
    }

    @Override
    public House getHouse() {
        return house;
    }
}

1.4 设计者(Director)

调用对不同具体建造的建造方法来建造产品

HouseDirector

package com.liuyao;

/**
 * @author liuyao
 * @date 2018/07/30
 */
public class HouseDirector {
    public void makeHouse(HouseBuilder houseBuilder){
        houseBuilder.makeFloor();
        houseBuilder.makeWall();
        houseBuilder.makeWindow();
    }
}


Main

package com.liuyao;

public class Main {

    public static void main(String[] args) {
//        创建工程队 建造平房
        HouseBuilder pingFangBuilder=new PingFangBuilder();
//        创建设计者
        HouseDirector director=new HouseDirector();
        director.makeHouse(pingFangBuilder);
        House pingFang=pingFangBuilder.getHouse();
        System.out.println(pingFang);

//        建造公寓
        HouseBuilder gongYuBuilder = new GongYuBuilder();
        director.makeHouse(gongYuBuilder);
        House gongYu=gongYuBuilder.getHouse();
        System.out.println(gongYu);
    }
}

2. 应用场景

  1. 创建一个符合对象,被创建的对象为一个具有复合属性的符合对象(我上面这是用了String代替,实际上可以创建由更多的复合属性)
  2. 关注对象创建的各个部分的创建过程,不同的Builder生成器对产品属性有不同的创建方法。
Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值