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

来源:互联网 发布:淘宝店铺怎么替换图片 编辑:程序博客网 时间:2024/05/18 01:45

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

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 0
原创粉丝点击