设计模式那点事读书笔记(3)----建造者模式
建造者模式: 建造者模式是将复杂的对象构造进行分离,使得每个部件完成比较独立的工作.通过抽象类,接口来约束建造的过程.
解决什么问题:
当生成的产品对象内部具有复杂的结构.
当复杂对象需要与表示分离,可能需要创建不同的表示时.
当需要向客户隐藏产品内部结构表现时.
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)----建造者模式相关推荐
- 【读书笔记】建造者模式代码完成与大家分享
建造者模式的好处就是隐藏了产品时如何组装产品,建造者模式主要用于一些复杂的对象,内部建造的顺序是固定的,但是每部建造的过程有很大的变化. C#代码:/Files/cappuccino/BuilderM ...
- JavaScript设计模式与开发实践---读书笔记(6) 代理模式
代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问. 代理模式的关键是,当客户不方便直接访问一个对象或者不满足需要的时候,提供一个替身对象来控制对这个对象的访问,客户实际上访问的是替身对象 ...
- 设计模式之禅读书笔记—行为类模式
设计模式之禅读书笔记-行为类模式 PDF下载地址 责任链模式 命令模式 解释器模式 迭代器模式 中介者模式 备忘录模式 观察者模式 状态模式 策略模式 模板方法模式 访问者模式 责任链模式 定义:使多 ...
- javascript设计模式(javascript设计模式与开发实践读书笔记)
javascript设计模式(javascript设计模式与开发实践读书笔记) 单例模式 策略模式 代理模式 迭代器模式 发布-订阅模式 命令模式 组合模式 模板方法模式 享元模式 职责链模式 中介者 ...
- 设计模式读书笔记-----工厂方法模式
一.问题 在前一章<设计模式读书笔记-----简单工厂模式>中通过披萨的实例介绍了简单工厂模式.在披萨实例中,如果我想根据地域的不同生产出不同口味的披萨,如纽约口味披萨,芝加哥口味披萨.如 ...
- 《自己动手写操作系统》读书笔记——初识保护模式
<自己动手写操作系统>读书笔记--初识保护模式 http://www.cnblogs.com/pang123hui/archive/2010/11/27/2309930.html 书本第三 ...
- 《设计模式的艺术》读书笔记
文章目录 预备知识:UML类图 类与类之间的关系 1. 关联关系 (1) 双向关联 (2) 单向关联 (3) 自关联 (4) 多重性关联 (5) 聚合关系 (6) 组合关系 2. 依赖关系 3. 泛化 ...
- 《设计模式之禅》读书笔记之C#版-创建类模式
备注:由于读的电子书版本是pdf的,影印都有些看不清楚.所有练习代码都单独放到了GitHub上方便以后查看. https://github.com/yuhezhangyanru/DesignPatte ...
- 23种设计模式C++源码与UML实现--建造者模式
建造者模式 代码仓库地址:建造者模式 Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种.Builder模式是一种对象创建模式之一,用来隐藏复合对象的创建过程.他把 ...
- 软件设计模式之模拟游角色选择(Darren建造者模式)
o(︶︿︶)o 唉,今天的状态不是很好,但是学习还是要继续的,今天和大家一起分享一下建造者模式,记得之前自己之前一直再想QQ秀换装是怎么是怎么是实现的,今天看了建造者模式我明白了... Darren又 ...
最新文章
- Android关于AndroidManifest.xml详细分析
- 简单易懂,ThreadPoolExecutor参数说明
- 【TensorFlow-windows】学习笔记五——自编码器
- 来自百度的一篇如何关闭Centos7的防火墙以及如何永久关闭防火墙的指令教学【转载】
- 中国内窥镜检漏装置行业市场供需与战略研究报告
- centeros mysql_center os 7 Mysql 安装
- Matlab遗传算法工具箱及应用
- 天津大学计算机学院2019夏令营,天津大学环境学院2019年全国优秀大学生夏令营顺利举行...
- 人人都是产品经理2.0-04章摘要
- react动态添加背景图片/不同内容添加对应背景
- 如何将自己的win7电脑变身WiFi无线网络热点
- 一个程序员未来5年的规划
- 专转本-数学考试大纲
- 计算机及其应用本课程,北京08自考计算机及应用(独本)课程设置
- 关于jmeter body Data 传参报错message“:“\u7528\u6237\u540d \u4e0d\u80fd\u4e3a\u7a7a\u3002“的解决方法
- 生命数字密码测试软件,生命数字密码
- 通用 Mapper UUID 简单示例
- LeetCode2029. 石子游戏 IX
- leetcode:77.组合
- SAP HANA 供应商主数据前台操作
热门文章
- C语言程序设计 第八章字符串
- matcaffe编译与测试
- 雄狮少年,究竟怎样,我们用实际的数据来一探究竟
- python语言检测模块langid、langdetect使用
- python使用scipy模块from scipy.misc import imread时报错:cannot import name imread问题解决
- opencv 头文件 包含 include 的问题
- C++ emplace_back()是什么
- 区块链测试工具 Caliper性能测试工具是什么
- Hyperledger Fabric教程(14)--byfn.sh所有命令
- python2.7 UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5