资讯专栏INFORMATION COLUMN

设计模式之建造者

Lucky_Boy / 1483人阅读

摘要:而这个组装主机的过程就是建造者模式最真实的写照。建造者都是独立的,我们可以对建造过程进行优化和细化,不会对其他的模块产生影响。建造者模式和工厂模式十分相像,但建造者模式关注的是配件和装配工艺顺序,而工厂模式的中心是对象的创建

前言

最近绝地逃生这个游戏大火,好多朋友为了吃鸡,都会自己组装一个高配主机来支持自己打游戏 。而这个组装主机的过程就是建造者模式最真实的写照....~。~

什么是建造者模式
将一个复杂对象的构建与它的表示分离,使得同样的构建工程可以创建不同的表示。
UML类图

Product:要构造的复杂的对象

Builder:定义一个抽象构造接口,规范产品每个部件的构造,并不涉及具体实现

ConcreteBuilder:真正的构造者,对产品每个部件的构造给出具体实现,并提供该产品的实例

Director:作为一个导演,它的职责就是调用ConcreteBuilder,让产品的部件按照我们指定的顺序去设置,然后返回我们的实例

代码分析
public class Computer {

    private String cpu;
    //主板
    private String mainboard;
    //内存
    private String memory;
    //显卡
    private String graphicsCard;
    //电源
    private String powerSource;

    public String getCpu() {
        return cpu;
    }

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public String getMainboard() {
        return mainboard;
    }

    public void setMainboard(String mainboard) {
        this.mainboard = mainboard;
    }

    public String getMemory() {
        return memory;
    }

    public void setMemory(String memory) {
        this.memory = memory;
    }

    public String getGraphicsCard() {
        return graphicsCard;
    }

    public void setGraphicsCard(String graphicsCard) {
        this.graphicsCard = graphicsCard;
    }

    public String getPowerSource() {
        return powerSource;
    }

    public void setPowerSource(String powerSource) {
        this.powerSource = powerSource;
    }

    @Override
    public String toString() {
        return "Computer{" +
                "cpu="" + cpu + """ +
                ", mainboard="" + mainboard + """ +
                ", memory="" + memory + """ +
                ", graphicsCard="" + graphicsCard + """ +
                ", powerSource="" + powerSource + """ +
                "}";
    }
}
public interface ComputerBuilder {

    void buildCpu();
    void buildMainboard();
    void buildMemory();
    void buildGraphicsCard();
    void buildPowerSource();

    Computer build();
}
public class ConcreteComputerBuilder implements ComputerBuilder {

    private Computer computer = new Computer();

    @Override
    public void buildCpu() {
        computer.setCpu("intel 7700");
    }

    @Override
    public void buildMainboard() {
        computer.setMainboard("华硕b5");
    }

    @Override
    public void buildMemory() {
        computer.setMemory("海盗船16g内存条双交火");
    }

    @Override
    public void buildGraphicsCard() {
        computer.setGraphicsCard("n卡1080");
    }

    @Override
    public void buildPowerSource() {
        computer.setPowerSource("安钛克全模组金牌额定500w");
    }

    @Override
    public Computer build() {
        return computer;
    }
}
public class ComputerDirector {

    private ComputerBuilder builder = new ConcreteComputerBuilder();

    public Computer getComputer(){

        builder.buildCpu();
        builder.buildGraphicsCard();
        builder.buildMainboard();
        builder.buildMemory();
        builder.buildPowerSource();

        return builder.build();
    }

}
public class Client {

    public static void main(String[] args) {

        ComputerDirector computerDirector = new ComputerDirector();
        Computer computer = computerDirector.getComputer();

        System.out.println("这个电脑的配置为:"+computer.toString());

    }
}
测试结果:这个电脑的配置为:Computer{cpu="intel 7700", mainboard="华硕b5", memory="海盗船16g内存条双交火", graphicsCard="n卡1080", powerSource="安钛克全模组金牌额定500w"}
使用场景

需要产生的对象有复杂的结构

在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品对象的创建过程中不易得到。

相同的方法,不同的执行顺序产生不同的结果。

或许会有人对第三个不是特别理解,因为在装机这个业务体现的不是特别明显。我们不妨换个场景考虑,煮汤都有特定的工序,什么时候加水,先加什么调料后加什么调料,如果你加的顺序不一样,做出的汤的味道都会有差别,对于此种场景可以使用该模式

总结

使用建造者模式,可以屏蔽产品内部实现的细节,直接生产产品即可。建造者都是独立的,我们可以对建造过程进行优化和细化,不会对其他的模块产生影响。建造者模式和工厂模式十分相像,但建造者模式关注的是配件和装配工艺(顺序),而工厂模式的中心是对象的创建.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70696.html

相关文章

  • 一天一个设计模式JS实现——建造模式

    摘要:参考文章设计模式之建造者模式一什么是建造者模式建造者模式是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 参考文章:java设计模式之建造者模式 一、什么是建造者模式建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓...

    boredream 评论0 收藏0
  • Java设计模式(三)——建造模式

    摘要:建造者模式实现建造者模式实现创建抽象建造者类创建具体建造者类。建造者模式使用场景建造者模式使用场景相同的方法,不同的执行顺序,产生不同的事件结果时,可以采用建造者模式。1、什么是建造者模式 Separate the construction of a complex object from its representation so that the same constructi...

    Forelax 评论0 收藏0
  • #yyds干货盘点#Java设计模式(三)——建造模式

    1、什么是建造者模式Separate the construction of a complex object from its representation so that the same construction process can create different representations.将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示。 说人话:将构...

    番茄西红柿 评论0 收藏2637
  • 设计模式建造设计模式

    摘要:本质建造者设计模式分离了对象子组件的构造过程和组装过程,实现了构建与组装的解耦,不同的构建器相同的组装顺序以及相同的构建器不同的组装顺序都可以创建出不同的对象,使得构建与组装充分解耦,进而实现构建算法与组装算法的解耦,从而实现更好的复用。 这是设计模式系列的第二篇——建造者设计模式,我希望推送的文章是一个系列的,尽量保持一样的写作风格,尽量把我理解的阐述清楚,关于建造者设计模式主要从以...

    wangxinarhat 评论0 收藏0
  • 设计模式建造模式

    摘要:建造者实现抽象类的所有未实现的方法,具体来说一般是两项任务组建产品返回组建好的产品。 0x01.定义与类型 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 用户只需指定需要建造的类型就可以得到他们,建造过程及细节不需要知道 类型:创建型 实现建造模式的两种方式 1.抽象建造者 UML: showImg(https://segmentfault.co...

    banana_pi 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<