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

网站模板 收费广州免费自助建站开发

网站模板 收费,广州免费自助建站开发,有赞微商城官网登录,天涯论坛说明#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.w-s-a.com/news/978049/

相关文章:

  • 建设公司内网网站的意义自助建站网站的宣传手册
  • 手机建设中网站建立个人网站服务器
  • 网站开发工程师岗位概要网站怎么制作教程
  • 城乡建设主管部门官方网站公司简介模板ppt范文
  • 网站认证必须做么cc0图片素材网站
  • net域名 著名网站国外设计案例网站
  • 淘宝客网站哪里可以做app地推网
  • 宜昌建设厅网站中国最新时事新闻
  • 微网站怎么开发wordpress 发表评论
  • 山东网站建设是什么一页网站首页图如何做
  • 游戏开发与网站开发哪个难万网影
  • 做网站编程语言建筑施工特种证书查询
  • 找人做网站内容自己编辑吗修改wordpress登陆界面
  • 登陆建设银行wap网站湖南网站建设磐石网络答疑
  • 58网站怎么做浏览度才高论坛网站怎么做排名
  • wordpress 手机网站支付京东网站建设的经费预算
  • 自己怎么样做游戏网站做海外贸易网站
  • 建立什么样的网站好制作网页网站代码
  • 岳麓区专业的建设网站公司尚一网常德论坛
  • 电商网站建设实训报告360站长平台链接提交
  • 个性化网站建设公司个人网站备案类型
  • 腾讯建站模板上海网站开发有限公司
  • 网站和小程序的区别请问做网站怎么赚钱
  • 网站logo设计免费版在线网站开发建设准备工作
  • wordpress多站点 主题南京做网站好的公司
  • 广州 门户seo到底是做什么的
  • 可以登录国外网站吗如何用家用电脑做网站
  • 吉安建站公司wordpress企业
  • 河北住房和城乡建设厅网站6thinkphp做视频网站
  • 遵义网站制作一般需要多少钱深圳全国网站制作哪个好