当前位置: 首页 > news >正文

厦门做外贸网站江苏建设科技网站

厦门做外贸网站,江苏建设科技网站,建设部网站证件查询,在线 crm楔子 小七在2019年的时候#xff0c;就想写一个关于设计模式的专栏#xff0c;但是最终却半途而废了。粗略一想#xff0c;如果做完一件事要100分钟#xff0c;小七用3分钟热情做的事#xff0c;最少也能完成10件事情了。所以这一次#xff0c;一定要把他做完#xff0…楔子 小七在2019年的时候就想写一个关于设计模式的专栏但是最终却半途而废了。粗略一想如果做完一件事要100分钟小七用3分钟热情做的事最少也能完成10件事情了。所以这一次一定要把他做完fighting 需求背景 以以前小七做的一个政务系统为例为了符合国标数据库表需要设计很多字段大概有100多个。每次new这个实体的时候都会调用大量的set方法关键是这100个字段基本不会变但是他们的组合却经常变弄得开发的小伙伴们苦不堪言于是前辈们就重载了很多的构造方法结果构造方法也爆炸了导致新来的后浪们差点直接被拍死在了沙滩上。 为了简化代码咱们这一次就定义一个Student类里面只包含name和age。 分析设计 因为这个对象的属性很多且组合方式很自由如果使用经典的new-set方式代码大概如下 BigObject bigObject new BigObject(); bigObject.setO1(); bigObject.setO2(); bigObject.setO3(); bigObject.setO4(); bigObject.setO5(); bigObject.setO6(); bigObject.setO7(); bigObject.setO8(); bigObject.setO9(); bigObject.setO10(); ... bigObject.setO100(); 看起来并不直观。 如果每一个组合就重载一个构造方法也会产生很多构造方法并且语义不明新来的小伙伴会一脸懵逼。 但是如果我们能够抽象一下产品的构建过程具体建造者类继承自抽象建造者类实现具体的构建逻辑。指挥者类负责调用具体建造者类的构建方法完成产品的构建。这样就可以降低客户端代码的复杂度提高代码的可维护性。 定义类名产品类Student抽象建造者类StudentBuilder具体建造者类StudentActualBuilder指挥者类Commander 标准建造者模式 UML图 根据分析设计我们可以先画一个简单的UML图后面通过UML图编码 模块名称 builder.demo01 模块地址 https://gitee.com/diqirenge/design-pattern/tree/master/src/main/java/com/run2code/design/creational/builder/demo01 模块描述 经典模式代码示例 代码实现 1、定义产品类 /*** 定义产品类* 关注公众号【奔跑的码畜】一起进步不迷路** author 第七人格* date 2023/11/20*/ public class Student {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {return age;}public void setAge(int age) {this.age age;}Overridepublic String toString() {return Student{ name name \ , age age };} } 2、定义抽象建造者类 /*** 定义抽象建造者类* 关注公众号【奔跑的码畜】一起进步不迷路** author 第七人格* date 2023/11/20*/ public abstract class StudentBuilder {public abstract void buildName(String name);public abstract void buildAge(int age);public abstract Student makeStudent(); } 3、定义具体建造者类 /*** 定义具体建造者类* 关注公众号【奔跑的码畜】一起进步不迷路** author 第七人格* date 2023/11/20*/ public class StudentActualBuilder extends StudentBuilder {/*** 这里使用组合将 student 组合到实现类中*/private Student student new Student();Overridepublic void buildName(String name) {student.setName(name);}Overridepublic void buildAge(int age) {student.setAge(age);}Overridepublic Student makeStudent() {return student;} } 4、定义指挥者类 /*** 定义指挥者类* 关注公众号【奔跑的码畜】一起进步不迷路** author 第七人格* date 2023/11/20*/ public class Commander {/*** 注入StudentBuilder*/private StudentBuilder studentBuilder;public void setStudentBuilder(StudentBuilder studentBuilder) {this.studentBuilder studentBuilder;}public Student makeStudent(String name, int age) {this.studentBuilder.buildAge(age);this.studentBuilder.buildName(name);return this.studentBuilder.makeStudent();} } 5、测试 public class BuilderStudentBuilderTest {Testpublic void testBuild_01() {System.out.println(标准建造者模式开始);StudentActualBuilder studentActualBuilder new StudentActualBuilder();Commander commander new Commander();commander.setStudentBuilder(studentActualBuilder);// 客户端使用指挥者类创建产品对象这样可以降低客户端代码的复杂度提高代码的可维护性。Student student commander.makeStudent(第七人格, 18);System.out.println(student);System.out.println(标准建造者模式结束);} } 6、测试结果 标准建造者模式开始 Student{name第七人格, age18} 标准建造者模式结束 实现要点 定义产品类产品类是最终要构建的对象包含多个属性和方法。 定义抽象建造者类抽象建造者类定义了产品的构建过程包括各个部分的构建方法和返回最终产品的方法。 定义具体建造者类具体建造者类继承自抽象建造者类实现具体的构建逻辑。 定义指挥者类指挥者类负责调用具体建造者类的构建方法完成产品的构建。 用过StringBuilder的我们知道StringBuilder有个append方法我们学着StringBuilder将上面的代码改为链式调用。 链式调用模式 URL图 模块名称 builder.demo02 模块地址 https://gitee.com/diqirenge/design-pattern/tree/master/src/main/java/com/run2code/design/creational/builder/demo02 模块描述 建造者-链式调用 代码实现 /*** 链式调用建造者示例* 关注公众号【奔跑的码畜】一起进步不迷路** author 第七人格* date 2023/11/20*/ public class Student02Builder {/*** 姓名*/private String name;/*** 年龄*/private int age;/*** 学生类的构造函数** param name 的名字* param age 年龄*/Student02Builder(String name, int age) {this.name name;this.age age;}/*** 构建器本质上就是指挥者Commander** return {link StudentBuilder}*/public static Student02Builder.StudentBuilder builder() {// 构造一个StudentBuilder对象return new Student02Builder.StudentBuilder();}/*** 学生构建器相当于StudentBuilder及其实现类StudentActualBuilder** author 第七人格* date 2020/12/02*/public static class StudentBuilder {private String name;private int age;public StudentBuilder() {}public Student02Builder.StudentBuilder name(String name) {this.name name;// 返回自身StudentBuilder以便链式调用return this;}public Student02Builder.StudentBuilder age(int age) {this.age age;// 返回自身StudentBuilder以便链式调用return this;}/*** 构建** return {link Student02Builder}*/public Student02Builder build() {// 构造一个Student对象其中的属性直接从外部传入return new Student02Builder(this.name, this.age);}Overridepublic String toString() {return Student.StudentBuilder(name this.name , age this.age );}}Overridepublic String toString() {return Student{ name name \ , age age };} } 测试 Test public void testBuild_02() {System.out.println(工作中常用-建造者模式开始);System.out.println(Student02Builder.builder().age(18).name(第七人格).build());System.out.println(工作中常用-建造者模式开始); } 测试结果 链式调用-建造者模式开始 Student{name第七人格, age18} 链式调用-建造者模式开始 实现要点 1、使用静态方法替换指挥者Commander public static Student02Builder.StudentBuilder builder() {// 构造一个StudentBuilder对象return new Student02Builder.StudentBuilder(); } 2、使用内部类替换StudentBuilder及StudentActualBuilder 3、内部类中设置属性的时候返回自身以便链式调用 面对对象面对君不负代码不负卿
http://www.dnsts.com.cn/news/87509.html

相关文章:

  • 沈阳网站哪家做的好大连建设网站的公司
  • 深圳哪家建设网站公司好WordPress自适应幻灯插件
  • 企业网站建设费现金流科目中天建设南京公司
  • 网站建设流程包括哪些医疗器械网
  • wordpress 页脚信息南宁seo网站排名优化
  • 做神马网站优杭州it培训机构推荐
  • 面试drupal网站开发岗位网站开发 源代码
  • 免费建网站的平台河南网站备案中心
  • 怎么免费注册网站wordpress5.0新编辑器
  • 网站快速建设软件下载wordpress工单
  • 哪个网站可以做车贷广州婚恋网站排名
  • 织梦网站专题模板下载可以做公众号的网站
  • 培训教育行业网站建设方案室内设计师联盟首页
  • 4在线做网站抚顺您做煮火锅网站
  • 网站开发与建设主要干什么网站开发做表格示例
  • 广东省监理建设协会网站开发手游
  • 成都网站内容策划网站建设最便宜多少钱
  • 深圳东门地铁站叫什么网站建设属于什么支出
  • h5和手机网站做网站思想
  • 婚庆网站设计福安网站定制
  • 建站平台排行网站架构分类
  • 爱站网关键词查询工具海外网站seo
  • 用qq邮箱做网站乐清网论坛
  • 专业网站是什么意思知名网站开发哪家好
  • 定制网站开发多少钱哪个网站建设平台支持花呗分期
  • 河南网站建设运营域名注册公司网站私信界面
  • 中石油网页设计与网站建设网站建设与管理工作内容
  • 技术支持 网站建设福千欣隆网站建设公司 概况
  • 网站收录有什么用做网站是用什么语言做成的
  • 官方网站旗舰店网络的结构