多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

【2013-10-17】设计模式学习笔记:建造者模式

【2013-10-17】设计模式学习笔记:建造者模式 [历史归档]本文原发布于 cstriker1407.info 个人博客内容为历史存档仅供参考。发布时间2013-10-17 标题设计模式学习笔记建造者模式分类编程 / 设计模式 / java 标签设计模式·java·建造者模式设计模式学习笔记建造者模式1. 将要制造的元素抽象出来将公用业务封装在抽象类中2. 分别实例化两个具体的元素3. 将制造类抽象出来屏蔽上层对具体元素的依赖4. 控制类与测试代码备注建造者模式Builder Pattern将复杂对象的构建过程与其表示分离使同样的构建流程可以创建不同的产品。示例代码https://github.com/cstriker1407/design_pattern1. 将要制造的元素抽象出来将公用业务封装在抽象类中/** * 父类设计成抽象类供子类继承。 */abstractclassCarModel{privatebooleanbIsAlarmfalse;// start/stop/alarm 对外不可见设计为 protectedprotectedabstractvoidstart();protectedabstractvoidstop();protectedabstractvoidalarm();// run 设置为 final固化业务流程防止子类重写publicfinalvoidrun(){start();if(isAlarm()){alarm();}stop();}// 钩子方法子类可通过 setAlarm 控制是否触发 alarmprivatebooleanisAlarm(){returnbIsAlarm;}publicfinalvoidsetAlarm(booleanisAlarm){this.bIsAlarmisAlarm;}}2. 分别实例化两个具体的元素classACarextendsCarModel{Overrideprotectedvoidstart(){System.out.println(A Car Start);}Overrideprotectedvoidstop(){System.out.println(A Car Stop);}Overrideprotectedvoidalarm(){System.out.println(A Car Alarm);}}classBCarextendsCarModel{Overrideprotectedvoidstart(){System.out.println(B Car Start);}Overrideprotectedvoidstop(){System.out.println(B Car Stop);}Overrideprotectedvoidalarm(){System.out.println(B Car Alarm);}}3. 将制造类抽象出来屏蔽上层对具体元素的依赖abstractclassCarBuilder{publicabstractvoidsetAlarm(booleanisAlarm);publicabstractCarModelgetCar();}classACarBuilderextendsCarBuilder{privateACaraCarnewACar();OverridepublicvoidsetAlarm(booleanisAlarm){aCar.setAlarm(isAlarm);}OverridepublicCarModelgetCar(){returnaCar;}}classBCarBuilderextendsCarBuilder{privateBCarbCarnewBCar();OverridepublicvoidsetAlarm(booleanisAlarm){bCar.setAlarm(isAlarm);}OverridepublicCarModelgetCar(){returnbCar;}}4. 控制类与测试代码classBuilderDirector{privateACarBuilderaCarBuildernewACarBuilder();privateBCarBuilderbCarBuildernewBCarBuilder();publicACargetACar(){aCarBuilder.setAlarm(true);return(ACar)aCarBuilder.getCar();}publicBCargetBCar(){bCarBuilder.setAlarm(false);return(BCar)bCarBuilder.getCar();}}publicclassBuilderTest{publicstaticvoidtest(){BuilderDirectordirectornewBuilderDirector();director.getACar().run();director.getBCar().run();}}备注上述代码部分来自《设计模式之禅》建造者模式定义后续补充
返回列表