前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每天5分钟-浅谈建造者模式

每天5分钟-浅谈建造者模式

作者头像
用户8902830
发布2021-08-12 11:00:58
2520
发布2021-08-12 11:00:58
举报
文章被收录于专栏:CodeNone

建造者模式


什么是建造者模式呢,顾名思义,把某个东西创建出来,说得准确点是,把各种部件按照需要的方式建造成一个产品。建造者模式「需要四个类,抽象建造者,具体建造者,产品类,导演类」

产品类:

代码语言:javascript
复制
public class Phone {
    //手机的部件
    private String cpu;
    private String screen;
    private String camera;
    
    //对部件的逻辑处理
    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public void setScreen(String screen) {
        this.screen = screen;
    }
    
    public void setCamera(String camera) {
        this.camera = camera;
    }
    
    public String use() {
        return "Phone{" +
                "cpu='" + cpu + '\'' +
                ", screen=" + screen +
                ", camera=" + camera +
                '}';
    }
    
}

抽象建造者类:

代码语言:javascript
复制
public abstract class AbstractBuilder {
    
    //多个部件供我们组合成不同的产品
    public abstract void midCpu();
    public abstract void midScreen();
    public abstract void midCamera();
    public abstract void topCpu();
    public abstract void topScreen();
    public abstract void topCamera();

    //组合完成后返回产品类
    public abstract Phone buildPhone();

}

具体建造者类:

注意并不是具体的产品,而是具体的厂商,生产不同品牌部件的建造者,在本例中有两个具体建造者类,一个是生产一加的各部件,一个是生产魅族的各部件。

代码语言:javascript
复制
public class OnePlusBuilder extends AbstractBuilder {

    Phone phone = new Phone();

    @Override
    public void midCpu() {
        phone.setCpu("一加高配处理器");
    }

    @Override
    public void midScreen() {
        phone.setScreen("一加高配屏幕");
    }

    @Override
    public void midCamera() {
        phone.setCamera("一加高配相机");
    }

    @Override
    public void topCpu() {
        phone.setCpu("一加顶配处理器");
    }

    @Override
    public void topScreen() {
        phone.setScreen("一加顶配屏幕");
    }

    @Override
    public void topCamera() {
        phone.setCamera("一加顶配相机");
    }

    @Override
    public Phone buildPhone() {
        return phone;
    }
}
代码语言:javascript
复制
public class MeizuBuilder extends AbstractBuilder {
    Phone phone = new Phone();

    @Override
    public void midCpu() {
        phone.setCpu("魅族中配处理器");
    }

    @Override
    public void midScreen() {
        phone.setScreen("魅族中配屏幕");
    }

    @Override
    public void midCamera() {
        phone.setCamera("魅族中配相机");
    }

    @Override
    public void topCpu() {
        phone.setCpu("魅族高配处理器");
    }

    @Override
    public void topScreen() {
        phone.setScreen("魅族高配屏幕");
    }

    @Override
    public void topCamera() {
        phone.setCamera("魅族高配相机");
    }

    @Override
    public Phone buildPhone() {
        return phone;
    }
}

导演类:

导演嘛,很形象,指挥要建造什么具体的产品

导演

代码语言:javascript
复制
public class Director {
    AbstractBuilder builder;

    public Director(AbstractBuilder builder) {
        this.builder = builder;
    }

    public Phone buildMidPhone() {
        builder.midCpu();
        builder.midCamera();
        builder.midScreen();
        return builder.buildPhone();
    }

    public Phone buildTopPhone() {
        builder.topCpu();
        builder.topCamera();
        builder.topScreen();

        return builder.buildPhone();
    }

}

现在不是都说手机是堆料嘛,导演类就负责,我能够用不同的料,甚至同样的料不同的堆积方法来给你堆出不同的产品。

像上面的例子中,我有6个部件,「但是不同的部件我能够生产不同的产品。」

测试类:

代码语言:javascript
复制
public class Test {
    public static void main(String[] args) {
        Director director = new Director(new OnePlusBuilder());
        System.out.println(director.buildMidPhone().use());
        System.out.println(director.buildTopPhone().use());

        director = new Director(new MeizuBuilder());
        System.out.println(director.buildMidPhone().use());
        System.out.println(director.buildTopPhone().use());
    }
}

与工厂模式的区别:

两者比较相似,但是不同的点还是比较清晰。

  • 工厂模式「注重的是个体」,你要什么手机,我就生产一部手机出来给你,不必要关心你内部的部件是怎样组合的,通常是一个方法生产一个产品。
  • 建造者模式就不一样了,「注重的是部件的组合」,不同的部件组合可以生产出来不一样的产品,通常是几个方法的整合次啊能生产一个产品
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CodeNone 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 建造者模式
    • 产品类:
      • 抽象建造者类:
        • 具体建造者类:
          • 导演类:
            • 测试类:
              • 与工厂模式的区别:
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档