建造者模式: 建造者模式是将复杂的对象构造进行分离,使得每个部件完成比较独立的工作.通过抽象类,接口来约束建造的过程.

解决什么问题:

  当生成的产品对象内部具有复杂的结构.

  当复杂对象需要与表示分离,可能需要创建不同的表示时.

  当需要向客户隐藏产品内部结构表现时.

UML:

  

代码结构:

  

商品的实体:

package com.demo.builder.model;/*** 产品实体*/
public class MobilePackage {private float money;private int shortInfo;private String music;public float getMoney() {return money;}public void setMoney(float money) {this.money = money;}public int getShortInfo() {return shortInfo;}public void setShortInfo(int shortInfo) {this.shortInfo = shortInfo;}public String getMusic() {return music;}public void setMusic(String music) {this.music = music;}
}

建造者的抽象类:

package com.demo.builder.base;import com.demo.builder.model.MobilePackage;/*** 建造者抽象类*/
public abstract class AbstractBasePackage {protected MobilePackage mobilePackage;public AbstractBasePackage() {this.mobilePackage = new MobilePackage();}
}

抽象建造者的行为:

package com.demo.builder.itf;import com.demo.builder.model.MobilePackage;/*** 抽象建造者行为*/
public interface IMobileBuilder {void buildMoney();void buildShortInfo();void buildMusic();MobilePackage getMobilePackage();
}

建造者实体1:

package com.demo.builder.itf;import com.demo.builder.base.AbstractBasePackage;
import com.demo.builder.model.MobilePackage;/*** 建造者实体1*/
public class MobileBuilderImpl1 extends AbstractBasePackage implements IMobileBuilder{@Overridepublic void buildMoney() {this.mobilePackage.setMoney(20.0f);}@Overridepublic void buildShortInfo() {this.mobilePackage.setShortInfo(400);}@Overridepublic void buildMusic() {this.mobilePackage.setMusic("歌曲1");}@Overridepublic MobilePackage getMobilePackage() {return this.mobilePackage;}
}

建造者的实体2:

package com.demo.builder.itf;import com.demo.builder.base.AbstractBasePackage;
import com.demo.builder.model.MobilePackage;/*** 建造者类2*/
public class MobileBuilderImpl2 extends AbstractBasePackage implements IMobileBuilder{@Overridepublic void buildMoney() {this.mobilePackage.setMoney(30.0f);}@Overridepublic void buildShortInfo() {this.mobilePackage.setShortInfo(600);}@Overridepublic void buildMusic() {this.mobilePackage.setMusic("歌曲2");}@Overridepublic MobilePackage getMobilePackage() {return this.mobilePackage;}
}

指导者:

package com.demo.builder.director;import com.demo.builder.itf.IMobileBuilder;
import com.demo.builder.model.MobilePackage;/*** 建造指导者*/
public class MobileDirector {public MobilePackage createMobilePackage(IMobileBuilder mobileBuilder) {if (mobileBuilder != null) {mobileBuilder.buildMoney();mobileBuilder.buildMusic();mobileBuilder.buildShortInfo();return mobileBuilder.getMobilePackage();}return null;}
}

实现方法:

package main;import com.demo.builder.director.MobileDirector;
import com.demo.builder.itf.MobileBuilderImpl1;
import com.demo.builder.itf.MobileBuilderImpl2;
import com.demo.builder.model.MobilePackage;/*** Created by Administrator on 2016/8/8.*/
public class MainApp {public static void main(String[] args) {MobileDirector mobileDirector = new MobileDirector();MobileBuilderImpl1 mobileBuilderImpl1 = new MobileBuilderImpl1();MobileBuilderImpl2 mobileBuilderImpl2 = new MobileBuilderImpl2();printMessage(mobileDirector.createMobilePackage(mobileBuilderImpl1));printMessage(mobileDirector.createMobilePackage(mobileBuilderImpl2));}public static void printMessage(MobilePackage mobilePackage) {System.out.println("--话费: " + mobilePackage.getMoney() + "\t短信: " + mobilePackage.getShortInfo() + "\t彩铃: " + mobilePackage.getMusic());}
}

  

转载于:https://www.cnblogs.com/arctique/p/5751303.html

设计模式那点事读书笔记(3)----建造者模式相关推荐

  1. 【读书笔记】建造者模式代码完成与大家分享

    建造者模式的好处就是隐藏了产品时如何组装产品,建造者模式主要用于一些复杂的对象,内部建造的顺序是固定的,但是每部建造的过程有很大的变化. C#代码:/Files/cappuccino/BuilderM ...

  2. JavaScript设计模式与开发实践---读书笔记(6) 代理模式

    代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问. 代理模式的关键是,当客户不方便直接访问一个对象或者不满足需要的时候,提供一个替身对象来控制对这个对象的访问,客户实际上访问的是替身对象 ...

  3. 设计模式之禅读书笔记—行为类模式

    设计模式之禅读书笔记-行为类模式 PDF下载地址 责任链模式 命令模式 解释器模式 迭代器模式 中介者模式 备忘录模式 观察者模式 状态模式 策略模式 模板方法模式 访问者模式 责任链模式 定义:使多 ...

  4. javascript设计模式(javascript设计模式与开发实践读书笔记)

    javascript设计模式(javascript设计模式与开发实践读书笔记) 单例模式 策略模式 代理模式 迭代器模式 发布-订阅模式 命令模式 组合模式 模板方法模式 享元模式 职责链模式 中介者 ...

  5. 设计模式读书笔记-----工厂方法模式

    一.问题 在前一章<设计模式读书笔记-----简单工厂模式>中通过披萨的实例介绍了简单工厂模式.在披萨实例中,如果我想根据地域的不同生产出不同口味的披萨,如纽约口味披萨,芝加哥口味披萨.如 ...

  6. 《自己动手写操作系统》读书笔记——初识保护模式

    <自己动手写操作系统>读书笔记--初识保护模式 http://www.cnblogs.com/pang123hui/archive/2010/11/27/2309930.html 书本第三 ...

  7. 《设计模式的艺术》读书笔记

    文章目录 预备知识:UML类图 类与类之间的关系 1. 关联关系 (1) 双向关联 (2) 单向关联 (3) 自关联 (4) 多重性关联 (5) 聚合关系 (6) 组合关系 2. 依赖关系 3. 泛化 ...

  8. 《设计模式之禅》读书笔记之C#版-创建类模式

    备注:由于读的电子书版本是pdf的,影印都有些看不清楚.所有练习代码都单独放到了GitHub上方便以后查看. https://github.com/yuhezhangyanru/DesignPatte ...

  9. 23种设计模式C++源码与UML实现--建造者模式

    建造者模式 代码仓库地址:建造者模式 Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种.Builder模式是一种对象创建模式之一,用来隐藏复合对象的创建过程.他把 ...

  10. 软件设计模式之模拟游角色选择(Darren建造者模式)

    o(︶︿︶)o 唉,今天的状态不是很好,但是学习还是要继续的,今天和大家一起分享一下建造者模式,记得之前自己之前一直再想QQ秀换装是怎么是怎么是实现的,今天看了建造者模式我明白了... Darren又 ...

最新文章

  1. Android关于AndroidManifest.xml详细分析
  2. 简单易懂,ThreadPoolExecutor参数说明
  3. 【TensorFlow-windows】学习笔记五——自编码器
  4. 来自百度的一篇如何关闭Centos7的防火墙以及如何永久关闭防火墙的指令教学【转载】
  5. 中国内窥镜检漏装置行业市场供需与战略研究报告
  6. centeros mysql_center os 7 Mysql 安装
  7. Matlab遗传算法工具箱及应用
  8. 天津大学计算机学院2019夏令营,天津大学环境学院2019年全国优秀大学生夏令营顺利举行...
  9. 人人都是产品经理2.0-04章摘要
  10. react动态添加背景图片/不同内容添加对应背景
  11. 如何将自己的win7电脑变身WiFi无线网络热点
  12. 一个程序员未来5年的规划
  13. 专转本-数学考试大纲
  14. 计算机及其应用本课程,北京08自考计算机及应用(独本)课程设置
  15. 关于jmeter body Data 传参报错message“:“\u7528\u6237\u540d \u4e0d\u80fd\u4e3a\u7a7a\u3002“的解决方法
  16. 生命数字密码测试软件,生命数字密码
  17. 通用 Mapper UUID 简单示例
  18. LeetCode2029. 石子游戏 IX
  19. leetcode:77.组合
  20. SAP HANA 供应商主数据前台操作

热门文章

  1. C语言程序设计 第八章字符串
  2. matcaffe编译与测试
  3. 雄狮少年,究竟怎样,我们用实际的数据来一探究竟
  4. python语言检测模块langid、langdetect使用
  5. python使用scipy模块from scipy.misc import imread时报错:cannot import name imread问题解决
  6. opencv 头文件 包含 include 的问题
  7. C++ emplace_back()是什么
  8. 区块链测试工具 Caliper性能测试工具是什么
  9. Hyperledger Fabric教程(14)--byfn.sh所有命令
  10. python2.7 UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5