【设计模式】—— 创建者模式Builder
前言:【模式总览】——————————by xingoo
模式意图
一个对象的创建十分复杂,为了区分构建过程和使用过程,因此分开。使用一个Director类进行对象的创建,Builder规定了这个创建过程。
模式结构
Builder 抽象建造者接口,规范各个组成部分的构建。
ConcreteBuilder 具体建造者角色,实现组成部分的构建,并提供示例。
Product 产品角色,创建返回的对象。
Director 导演者角色,负责创建以及使用。
使用场景
1 当创建对象复杂并且与其使用过程独立。
2 构造过程允许构造的对象有不同的表示。
代码结构
Builder接口
- abstract class Builder{
- public abstract void buildPart1();
- public abstract void buildPart2();
- public abstract Product retrieveResult();
- }
ConcreteBuilder 具体产品
- class ConcreteBuilder extends Builder{
- public void buildPart1() {
- }
- public void buildPart2() {
- }
- public Product retrieveResult() {
- return null;
- }
- }
Product 产品
- class Product{
- //Anything
- }
Director 导演者角色
- class Director{
- private Builder builder;
- public void Constructor(){
- builder = new ConcreteBuilder();
- builder.buildPart1();
- builder.buildPart2();
- builder.retrieveResult();
- }
- }
生活中的设计模式
‘ 近年来,变形金刚4出了也快半年了,但是还是喜欢第一部的女主角。
而擎天柱队长,经典的台词,“汽车人变身”也是伴随着复杂的变化过程。而汽车人的转变只在一瞬之间,看起来行云流水,这就有点创建者的味道。擎天柱的各个身体部分经过复杂的变化,最后变身成为汽车人。
- /**
- * Builder
- */
- interface Transformer{
- public void Create_Head();
- public void Create_Body();
- public Autobots transforming();
- }
- /**
- * ConcreteBuilder
- */
- class Transformer_Captain implements Transformer{
- public void Create_Head() {
- System.out.println("变形出脑袋...");
- }
- public void Create_Body() {
- System.out.println("变形出身体...");
- }
- public Autobots transforming() {
- return new Autobots();
- }
- }
- /**
- * Product
- */
- class Autobots{
- Autobots(){
- System.out.println("啊!...变形金刚 变身....");
- }
- }
- /**
- * 这个类当做Director
- */
- public class TransformerBuilder {
- public static Autobots Transforming(Transformer optimusPrime){
- optimusPrime.Create_Head();
- optimusPrime.Create_Body();
- return optimusPrime.transforming();
- }
- public static void main(String[] args){
- Transformer optimusPrime = new Transformer_Captain();
- Transforming(optimusPrime);
- }
- }
变身结果
- 变形出脑袋...
- 变形出身体...
- 啊!...变形金刚 变身....
【设计模式】—— 创建者模式Builder的更多相关文章
- [设计模式] 3 创建者模式 builder
转载http://blog.csdn.net/wuzhekai1985/article/details/6667467 建造者模式的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不 ...
- 设计模式学习总结(五)创建者模式(Builder)
创建者模式,主要针对某些产品有类似的生产步骤,且有需要有先后顺序的进行各个部件的生成. 一.示例展示: 通过学习及总结,以下是我完成的创建者模式的示例: 1.创建产品类:Laptop public c ...
- 创建者模式-Builder
创建者模式使用多个简单的对象一步一步构建成一个复杂的对象.它提供了一种创建对象的最佳方式.一个 Builder 类会一步一步构造最终的对象,该 Builder 类是独立于其他对象的. 一.类图 创建者 ...
- 创建者模式Builder
创建者模式: 分离对象子组件的单独构造(由Builder来负责)和装配(由Director负责),对象的构造比较复杂时使用 该模式. 类图: Builder 抽象建造者接口,规范各个组成部分的构建. ...
- 设计模式—建造者模式(Builder)
title: 设计模式-建造者模式 建造者模式(Builder)是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节.建造者模式属于对 ...
- 23种设计模式--建造者模式-Builder Pattern
一.建造模式的介绍 建造者模式就是将零件组装成一个整体,用官方一点的话来讲就是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示.生活中比如说组装电脑,汽车等等这些都是建 ...
- 设计模式--建造者模式Builder(创建型)
一.首先看建造者模式的UML图: 二.再来看一个建造者模式的例子 class Builder { public: virtual void BuildHead() {} virtual void Bu ...
- 说说设计模式~建造者模式(Builder)
返回目录 建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我 ...
- C#设计模式——生成器模式(Builder Pattern)
一.概述在软件系统中,有时候面临着复杂的对象创建,该对象由一定算法构成的子对象组成,由于需求变化,这些子对象会经常变换,但组合在一起的算法却是稳定的.生成器模式可以处理这类对象的构建,它提供了一种封装 ...
随机推荐
- (二)基于阿里云的MQTT远程控制(购买阿里云,在云端安装MQTT,测试MQTT远程通信)
QQ名称为Friday~的网友把他自己买MQTT的过程截图发给了我,今天就说一下如何购买阿里云,安装MQTT可以参考 http://www.cnblogs.com/yangfengwu/p/77646 ...
- 所谓的液晶屏驱动IC是单独的IC还是在屏内就集成
所谓的液晶屏驱动IC是单独的IC还是在屏内就集成 时间:2016-12-05 作者:admin 其实无论什么液晶屏,想要正常工作必须包括两个人:玻璃屏+驱动IC:但是现在有一些液晶厂商他们不 ...
- MyBatis在Oracle中插入数据并返回主键的问题解决
引言: 在MyBatis中,希望在Oracle中插入数据之时,同一时候返回主键值,而非插入的条数... 环境:MyBatis 3.2 , Oracle. Spring 3.2 SQL Snipp ...
- 百度谷歌雅虎三大搜索引擎比较和如何配置谷歌访问助手访问Google搜索服务
引言: 由于近期网上盛传”百度搜索引擎已死“的消息,引发个人对于搜索引擎的思考.百度作为最大的中文搜索引擎,确实有着很大声誉,再加上本地化的优势,正成为国人们的首选,但是作为一名技术开发人员,使用搜索 ...
- 20155236范晨歌_Web基础
20155236范晨歌_Web基础 目录 实践目标 Apache 前端编程 后端编程 PHP MYSQL & 后端 简单SQL注入与XSS 发帖和会话管理 实践目标 (1)Web前端HTML ...
- 使用FindAncestor查找方式绑定且不需要使用datacontext
原文:使用FindAncestor查找方式绑定且不需要使用datacontext <UserControl x:Class="QuJiao.AnimationVideoPlayer&q ...
- python 回溯法 子集树模板 系列 —— 17、找零问题
问题 有面额10元.5元.2元.1元的硬币,数量分别为3个.5个.7个.12个.现在需要给顾客找零16元,要求硬币的个数最少,应该如何找零?或者指出该问题无解. 分析 元素--状态空间分析大法:四种面 ...
- ASP.NET Core分布式项目实战-目录
前言 今年是2018年,发现已经有4年没有写博客了,在这4年的时光里,接触了很多的.NET技术,自己的技术也得到很大的进步.在这段时光里面很感谢张队长以及其他开发者一直对.NET Core开源社区做出 ...
- Jq_Js_Js、Jq获取浏览器和屏幕各种高度宽度
$(document).ready(function() {alert($(window).height()); //浏览器当前窗口可视区域高度alert($(document).he ...
- HTML 图像实例
61.插入图像本例演示如何在网页中显示图像.图像标签(<img>)和源属性(Src)在 HTML 中,图像由 <img> 标签定义. <img> 是空标签,意思是说 ...