首页 > 其他分享 >建造者模式

建造者模式

时间:2023-03-24 17:11:24浏览次数:34  
标签:VA 建造 模式 Label water Integer protein public

坚持不懈,不断学习

建造模式解决的痛点

  1. 不优雅
  2. 不方便阅读
new Label(0,1,0,1,0,2);
  1. 容易出错(赋值后再进行更改)
Label label1=new Label();
label.setWater(0);
label.setWater(2);

场景引入

只是举例(可能不符合实际场景):

假设下面Label是某公司的营养标签

Class Label{

    Integer water;
    Integer sodium; // 钠元素
    Integer protein;// 蛋白质
    Integer VA; // 维生素A
    Integer VB; // 维生素B
    Integer VC; // 维生素C

}

我生产了一瓶纯水(只有水)
我生产了一瓶饮料(有水、维生素A)
我生产了一包肉(有水、蛋白质、维生素C)

那么你会怎么设计这个类?

第一种方案

Class Label{

    Integer water;
    Integer sodium; // 钠元素
    Integer protein;// 蛋白质
    Integer VA; // 维生素A
    Integer VB; // 维生素B
    Integer VC; // 维生素C

    public Label(Integer Water){
        this.water=water;
    }
    public Label(Integer Water,Integer VA){
        this.water=water;
        this.VA=VA;
    }
    public Label(Integer Water,Integer protein,Integer VC){
        this.water=water;
        this.protein=protein;
        this.VC=VC;
    }

}

一看,可以解决上面的问题。又一看,不优雅(优雅的代码,自己看着也舒服),假如新增加一个牛奶(水、蛋白质、维生素A)怎么办?构造方法排列组合()。

第二种方案

Class Label{

    Integer water;
    Integer sodium; // 钠元素
    Integer protein;// 蛋白质
    Integer VA; // 维生素A
    Integer VB; // 维生素B
    Integer VC; // 维生素C


    public Label(Integer Water,Integer protein,Integer VA,Integer VB,Integer VC){
        this.water=water==null? 0: water;
        this.protein=protein==null? 0: protein;
        this.VA=VA==null? 0: VA;
        this.VB=VB==null? 0: VB;
        this.VC=VC==null? 0: VC;
    }

}

一看,可以解决上面的问题。又一看,不优雅(优雅的代码,自己看着也舒服)
看看实际怎么使用的?

new Label(0,0,0,0,0,0,0,0,0,0,0,0,5,1,2,5,0,0,1,0,0);
new Label(0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);

不优雅

第三种方案

JavaBean

Class Label{

    Integer water;
    Integer sodium; // 钠元素
    Integer protein;// 蛋白质
    Integer VA; // 维生素A
    Integer VB; // 维生素B
    Integer VC; // 维生素C


    public Label(){}

    public void setWater(Integer water){
        this.water=water;
    }
    public void setSodium(Integer sodium){
        this.sodium=sodium;
    }
    public void setProtein(Integer protein){
        this.protein=protein;
    }
    public void setVA(Integer VA){
        this.VA=VA;
    }
    public void setVB(Integer VB){
        this.VB=VB;
    }
    public void setVC(Integer VC){
        this.VC=VC;
    }

}

你猜猜什么问题?不优雅。

标签:VA,建造,模式,Label,water,Integer,protein,public
From: https://www.cnblogs.com/handsometaoa/p/17252755.html

相关文章

  • EF框架的三种模式
    DatabaseFirstDatabaseFirst就是先建数据库或使用已有的数据库。然后在vs中添加ADO.Net实体数据模型,设置连接并且选择需要的数据库和表。它是以数据库设计为基础的,并根......
  • JMeter 非GUI模式运行碰到的问题
    在非GUI模式,通过命令开始进行压力测试后,在命令提示框中出现了以下警告信息:MonMay1813:33:27CST2020WARN:EstablishingSSLconnectionwithoutserver'sidentity......
  • JMeter 非GUI(CLI)模式
     本文主要涉及非GUI模式的运行、生成Html报告、以及如何在非GUI模式下保存TPS等信息。1、非GUI模式相对于GUI模式即,在JMeter界面直接执行脚本,非GUI是通过命令执行测试......
  • 【设计模式】行为型之访问者模式
    前言最近在看Solidity编译器代码(C++实现),其中使用到了设计模式中的访问者模式,这里正好学习一下。GoF的设计模式书虽然讲的很详细,但是这里还是结合实际项目中的应用来说一......
  • 重学Java设计模式-结构型模式-组合模式
    重学Java设计模式-结构型模式-组合模式内容摘自:https://bugstack.cn/md/develop/design-pattern/2020-06-08-重学Java设计模式《实战组合模式》.html#重学-java-设计模......
  • 前端设计模式——外观模式
    外观模式(FacadePattern):它提供了一个简单的接口,用于访问复杂的系统或子系统。通过外观模式,客户端可以通过一个简单的接口来访问复杂的系统,而无需了解系统内部的具体实现细......
  • 重学Java设计模式-结构型模式-桥接模式
    重学Java设计模式-结构型模式-桥接模式内容摘自:https://bugstack.cn/md/develop/design-pattern/2020-06-04-重学Java设计模式《实战桥接模式》.html#重学-java-设计模......
  • VMware NAT 模式 虚拟机网络电缆被拔出,连不上网
    检查服务VMnetDHCP,VMwareNATService服务是否已启动,启动后可以正常使用网络......
  • 需求分析阶段商业模式
    需求分析阶段商业模式在需求分析阶段的商业模式中,以下是九种关键要素:名称描述价值主张(ValueProposition)告诉客户企业所提供的产品或服务的唯一价值市场......
  • 6502 寻址模式详解
    6502共有13种寻址模式:A:寄存器寻址。指令形式为OPCA;目标数据位于A寄存器中,属于隐含寻址;使用这种寻址模式的指令都是1个字节长度,需要2个时钟周期abs:绝对地址寻......