设计模式--建造者模式

概念

将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

使用场景

主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。

案例

下面写一个创建电脑的案例,电脑有 主板、显示屏、系统组成。但是我们想要创建一个Mac电脑。首先能确定苹果电脑的系统是OS。

computer

public abstract class Computer {
    protected String os;
    protected String broad;
    protected String display;

    public void setOs(String os) {
        this.os = os;
    }
    public void setBroad(String broad) {
        this.broad = broad;
    }

    public void setDisplay(String display) {
        this.display = display;
    }
    @Override
    public String toString() {
        return "Computer{" +
                "os='" + os + '\'' +
                ", broad='" + broad + '\'' +
                ", display='" + display + '\'' +
                '}';
    }
}

MacBook 以及内部类 Builder

 public abstract class Builder {

    public abstract Builder buildOs(String os);
    public abstract Builder buildDisplay(String display);
    public abstract Builder buildBroad(String broad);

    public abstract Computer build();
}


public class MacBook extends Computer {
    
    public MacBook(String os, String broad, String display) {

        this.os = os;
        this.broad = broad;
        this.display = display;
    }
    public static class MacBookBuilder extends Builder{

        private String os,broad,display;
        @Override
        public Builder buildOs(String os) {
            this.os =os;
            return this;
        }

        @Override
        public Builder buildDisplay(String display) {
            this.display = display;
            return this;
        }

        @Override
        public Builder buildBroad(String broad) {
            this.broad= broad;
            return this;
        }

        @Override
        public Computer build() {
            return new MacBook(os,broad,display);
        }
    }
}


执行代码


        Computer macBookBuilder = new MacBook.MacBookBuilder()
                .buildOs("huawei")
                .buildDisplay("xxx")
                .buildBroad("mac OS ")
                .build();

        Log.d(TAG, "testBuilder: " + macBookBuilder.toString());
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 建造者模式(生成器模式) 介绍 没有人买车会只买一个轮胎或者方向盘,大家买的都是一辆包含轮胎、方向盘和发动机等多个...
    666真666阅读 5,400评论 2 10
  • 目录 本文的结构如下: 引言 什么是建造者模式 模式的结构 典型代码 代码示例 Builder模式变种 建造者模式...
    w1992wishes阅读 491评论 0 3
  • 定义 建造模式是对象的创建模式。建造模式可以将一个产品的内部表象(internal representation)...
    步积阅读 7,140评论 1 7
  • 忘不了的夏天 是长途跋涉的汽车 是三楼最末的教室 是三三俩俩的街边小摊 是五脏俱全的简陋房间 是讨人厌的蛐蛐 是滴...
    阿昆夜谈阅读 193评论 0 0
  • 人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力。1万小时的锤炼是任何人从平凡变成超凡的必...
    红尘白紫陌阅读 469评论 0 0

友情链接更多精彩内容