设计模式(三):建造者模式Builder(创建型模式)

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
一.适用性

1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2.当构造过程必须允许被构造的对象有不同的表示时。

二.参与者

1.Builder
为创建一个Product对象的各个部件指定抽象接口。

2.ConcreteBuilder
实现Builder的接口以构造和装配该产品的各个部件。
定义并明确它所创建的表示。
提供一个检索产品的接口。

3.Director
构造一个使用Builder接口的对象。

4.Product
表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。
包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

三.实例

package com.zoey.designPattern.Builder;

public class pupil {
    private String redScarf;
    private String schoolUniform;
    private String schoolBag;
    public String getRedScarf() {
        return redScarf;
    }
    public void setRedScarf(String redScarf) {
        this.redScarf = redScarf;
    }
    public String getSchoolUniform() {
        return schoolUniform;
    }
    public void setSchoolUniform(String schoolUniform) {
        this.schoolUniform = schoolUniform;
    }
    public String getSchoolBag() {
        return schoolBag;
    }
    public void setSchoolBag(String schoolBag) {
        this.schoolBag = schoolBag;
    }
}
package com.zoey.designPattern.Builder;

public class FemalePupil extends pupil {


}
package com.zoey.designPattern.Builder;

public interface pupilBuilder {
    void buildRedScarf();
    void buildSchoolUniform();
    void buildSchoolBag();

    pupil buildPupil();
}
package com.zoey.designPattern.Builder;

public class FemaleBuilder implements pupilBuilder {

    pupil p ;

    public FemaleBuilder(){
        p = new FemalePupil();
    }

    @Override
    public void buildRedScarf() {
       p.setRedScarf("制作一条红领巾");
    }

    @Override
    public void buildSchoolUniform() {
        p.setSchoolUniform("买一套校服");
    }

    @Override
    public void buildSchoolBag() {
        p.setSchoolBag("买一个小书包");
    }

    @Override
    public pupil buildPupil() {
        return p;
    }

}
package com.zoey.designPattern.Builder;

public class pupilDirector {

    public pupil constructPupil(pupilBuilder pb){
        pb.buildRedScarf();
        pb.buildSchoolUniform();
        pb.buildSchoolBag();
        return pb.buildPupil();
    }
}
package com.zoey.designPattern.Builder;

public class test {

    public static void main(String[] args) {
        pupilDirector pd = new pupilDirector();
        pupil p = pd.constructPupil(new FemaleBuilder());
        System.out.println(p.getRedScarf());
        System.out.println(p.getSchoolUniform());
        System.out.println(p.getSchoolBag());
    }

}

结果:

制作一条红领巾
买一套校服
买一个小书包

比喻:摘自网络

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值