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

做网站钱世界青田网app

做网站钱,世界青田网app,获取更多付费流量,陕西印象传媒投资集团有限公司说明#xff1a;本文介绍设计模式中#xff0c;创建型设计模式中的最后一个#xff0c;建造者模式#xff1b; 入学报道 创建型模式#xff0c;关注于对象的创建#xff0c;建造者模式也不例外。假设现在有一个场景#xff0c;高校开学#xff0c;学生、教师、职工都…说明本文介绍设计模式中创建型设计模式中的最后一个建造者模式 入学报道 创建型模式关注于对象的创建建造者模式也不例外。假设现在有一个场景高校开学学生、教师、职工都要办理相关的报道手续如签到、个人信息录入、分配身份证明学生证、教师证、职工证等等 首先创建一个抽象类如下 Person人员类有签到、个人信息、身份证明属性 /*** 人员*/ public class Person {/*** 签到*/private String signIn;/*** 个人信息*/private String profile;/*** 身份证明*/private String idCard;public String getSignIn() {return signIn;}public void setSignIn(String signIn) {this.signIn signIn;}public String getProfile() {return profile;}public void setProfile(String profile) {this.profile profile;}public String getIdCard() {return idCard;}public void setIdCard(String idCard) {this.idCard idCard;} }在创建具体对象之前先创建一个抽象的建造者类用于统一方法定义人员对象 PersonBuilder人员建造者 /*** 抽象建造者*/ public abstract class PersonBuilder {Person person new Person();/*** 签到行为*/public abstract void buildSignIn();/*** 录入个人信息*/public abstract void buildProfile();/*** 办理身份证明*/public abstract void buildIdCard();/*** 建造完成* return*/public Person build() {return person;} }Student学生类继承人员建造者重写学生入学相关方法 /*** 学生入学*/ public class Student extends PersonBuilder {Overridepublic void buildSignIn() {person.setSignIn(学生已签到);}Overridepublic void buildProfile() {person.setProfile(学生信息已录入);}Overridepublic void buildIdCard() {person.setIdCard(学生证已办理);} }Teacher教师类继承人员建造者重写教师入学相关方法 /*** 教师入学*/ public class Teacher extends PersonBuilder {Overridepublic void buildSignIn() {person.setSignIn(老师已签到);}Overridepublic void buildProfile() {person.setProfile(老师个人信息已录入);}Overridepublic void buildIdCard() {person.setIdCard(老师身份证已办理);} }Employee职工类继承人员建造者重写职工入学相关方法 /*** 职工入学*/ public class Employee extends PersonBuilder {Overridepublic void buildSignIn() {person.setSignIn(员工已签到);}Overridepublic void buildProfile() {person.setProfile(员工个人信息已录入);}Overridepublic void buildIdCard() {person.setIdCard(员工身份证已办理);} }再创建一个建造者控制类协调入学后的具体事宜如先签到、后录入个人信息最后才发身份证明返回建造完成的人员对象 PersonController人员入学控制器 /*** 人员入学控制器*/ public class PersonController {/*** 人员入学* return*/public Person construct(PersonBuilder personBuilder) {personBuilder.buildSignIn();personBuilder.buildProfile();personBuilder.buildIdCard();return personBuilder.build();} }Client客户端演示人员入学过程 /*** 客户端*/ public class Client {public static void main(String[] args) {// 一个学生入学Person student new PersonController().construct(new Student());System.out.println(student.getSignIn());System.out.println(student.getProfile());System.out.println(student.getIdCard());System.out.println();// 一个老师入学Person teacher new PersonController().construct(new Teacher());System.out.println(teacher.getSignIn());System.out.println(teacher.getProfile());System.out.println(teacher.getIdCard());} }执行结果可见对象已创建完成 改进与优化 在《设计模式的艺术》第一版刘伟著中作者关于PersonController人员控制器类的作用有两点改进与优化的地方如下 改进可省略PersonController 可在抽象建造者类PersonBuilder人员建造者中定义一个静态的Person变量这样就不需要额外设立一个PersonController类了如下 PersonBuilder抽象人员建造者既统一了方法也完成了建造的流程 /*** 抽象建造者*/ public abstract class PersonBuilder {/*** 定义一个抽象的Person*/protected static Person person new Person();/*** 签到行为*/public abstract void buildSignIn();/*** 录入个人信息*/public abstract void buildProfile();/*** 办理身份证明*/public abstract void buildIdCard();/*** 建造Person* return*/public static Person build(PersonBuilder personBuilder) {personBuilder.buildSignIn();personBuilder.buildProfile();personBuilder.buildIdCard();return person;} }Client客户端使用人员建造者的build()方法建造对象 /*** 客户端*/ public class Client {public static void main(String[] args) {// 一个学生入学Person student PersonBuilder.build(new Student());System.out.println(student.getSignIn());System.out.println(student.getProfile());System.out.println(student.getIdCard());System.out.println();// 一个老师入学Person teacher PersonBuilder.build(new Teacher());System.out.println(teacher.getSignIn());System.out.println(teacher.getProfile());System.out.println(teacher.getIdCard());} }执行效果相同 优化细化建造过程 可以定义一个“钩子”方法“钩子”方法一般是“isXXX”命名的返回值为boolean类型。利用“钩子”方法规定某些人员可以跳过或者必须执行某方法来细化对象建造的流程。如规定教师人员的建造因为教师流动不大可以跳过录入信息流程。 就可以在PersonBuilder类中定义一个“钩子”方法默认返回true即默认所有人员都需要录入个人信息。如下 /*** 抽象建造者*/ public abstract class PersonBuilder {/*** 定义一个抽象的Person*/protected static Person person new Person();/*** 签到行为*/public abstract void buildSignIn();/*** 录入个人信息*/public abstract void buildProfile();/*** 办理身份证明*/public abstract void buildIdCard();/*** 钩子方法表示默认所有人都需要经过buildProfile()方法具体由子类实现*/public boolean isBuildProfile() {return true;}/*** 建造Person* return*/public static Person build(PersonBuilder personBuilder) {personBuilder.buildSignIn();// 根据钩子方法判断是否需要buildProfile()if (personBuilder.isBuildProfile()) {personBuilder.buildProfile();}personBuilder.buildIdCard();return person;} }教师类中可以重写这个“钩子”方法表示不需要执行录入个人信息这个流程了。 /*** 教师入学*/ public class Teacher extends PersonBuilder {Overridepublic void buildSignIn() {person.setSignIn(老师已签到);}Overridepublic void buildProfile() {person.setProfile(老师个人信息已录入);}Overridepublic void buildIdCard() {person.setIdCard(老师身份证已办理);}Overridepublic boolean isBuildProfile() {return false;} }客户端代码不变执行 /*** 客户端*/ public class Client {public static void main(String[] args) {// 一个学生入学Person student PersonBuilder.build(new Student());System.out.println(student.getSignIn());System.out.println(student.getProfile());System.out.println(student.getIdCard());System.out.println();// 一个老师入学Person teacher PersonBuilder.build(new Teacher());System.out.println(teacher.getSignIn());System.out.println(teacher.getProfile());System.out.println(teacher.getIdCard());} } 执行结果可以看到教师确实是没有执行录入个人信息的方法但是因为Person是static修饰的属性打印的是上面学生的值。 那么如果避免这个问题值得思考或者就不省略PersonController类。 小结 建造者模式通过定义一个抽象建造者类封装了对象创建的细节另外通过“钩子”方法可细化对象创建过程降低了系统复杂度维护了系统的灵活性和扩展性。 总结 本文参考《设计模式的艺术》、《秒懂设计模式》两书
http://www.hkea.cn/news/14524177/

相关文章:

  • 关于建设网站的需求分析wordpress获取自定义文章分类名
  • 猪八戒建站服务外贸网店怎么开店
  • 怎么做新浪网站google谷歌搜索引擎
  • 3免费做网站云表无代码开发平台
  • 网站建设公司哪个好点快看点自媒体注册入口
  • 门户网站建设摘要网站首页建设公司
  • 外贸做的社交网站重庆机械加工网
  • 滕州手机网站建设余姚做网站哪家好
  • 石家庄网站建设方案推广你会回来感谢我的正能量视频
  • 电线电缆做销售哪个网站好小说网站用什么虚拟主机
  • 有做lol直播网站有哪些公路投资建设有限公司网站
  • 电商网站开源授权二次开发做网站的英文
  • 昌邑网站制作做网站 分辨率应该是多少
  • 网站建设做微营销wordpress制作vr全景
  • 哪个网站建站速度快上海人才网官网下载
  • 设计网站开发费用计入什么科目个人网页策划书
  • 海口cms建站系统建站方法
  • 哪个公司网站建设好wordpress rss小工具
  • 哪个网站做系统宁波好的seo外包公司
  • 河北省网站建设公司网站运营策划方案
  • 购物网站后台模板wordpress安装用户名
  • 无锡 做网站线上平台名称大全
  • 成都建站推广做药材有什么好的网站
  • 设计发明的网站临沂网站设计价格
  • 广告发布网站开发上海橙网站设计公司
  • alexa的网站排名主要分为哪两种个人能否做网站
  • 江门网站制作华企立方昆明网站定制开发
  • 网站设计要注意事项四网合一的网站
  • 义乌网站建设工作室用帝国cms做企业网站
  • 淘宝联盟怎么样做网站威海做企业网站