无论是修一段路,或是盖一间房,就算是学习知识都是循序渐进的。先打基础,再做提高,最后成路、成房、成人。如果一上来就铺石子不打路基,直接砌墙不打房基,直接看书而不识字,想必一切都不会好吧。这其中就有了建造者模式的概念了。

建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

  建造者建造对象时,对客户端说来是透明的。而且,建造的顺序以及过程和建造材料都是固定的,这就保证了建造出来的产品不会缺这少那。

  下面是建造者的类图

  根据类图可以看出建造者的整个结构,分析如下

Builder:抽象建造者。它声明为创建一个Product对象的各个部件指定的抽象接口。
ConcreteBuilder:具体建造者。实现抽象接口,构建和装配各个部件。
Director:指挥者。构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象,它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。
Product:产品角色。一个具体的产品对象。

  现在有个需求,很多人都在用中国移动的业务吧?中国移动曾经有两个套餐,神州行和动感地带。套餐中都有流量、短信、通话时长等。如何用建造者模式实现功能呢?

  首先是产品类

  

//神州行套餐
public class ChinaMobilePackage {int price;// 价格int flow;// 流量int message;// 短信数int callTime;// 通话时长String name;public int getFlow() {return flow;}public void setFlow(int flow) {this.flow = flow;}public int getMessage() {return message;}public void setMessage(int message) {this.message = message;}public int getCallTime() {return callTime;}public void setCallTime(int callTime) {this.callTime = callTime;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}public void show() {System.out.println("中国移动" + name + "套餐包括:\n" + flow + "M流量、" + message + "条短信和" + callTime + "分钟通话时长。月使用费" + price + "元。");}
}

  其次是建造接口

public interface ChinaMobilePackageBuilder {public void addName();public void addFlow();public void addMessage();public void addCallTime();public void addPrice();public ChinaMobilePackage getResult();
}

  各个建造的实现类

//神州行的建造者类
public class EasyOwnBuilder implements ChinaMobilePackageBuilder {private ChinaMobilePackage chinaMobilePackage = new ChinaMobilePackage();@Overridepublic void addName() {chinaMobilePackage.setName("神州行");}@Overridepublic void addFlow() {chinaMobilePackage.setFlow(30);}@Overridepublic void addMessage() {chinaMobilePackage.setMessage(20);}@Overridepublic void addCallTime() {chinaMobilePackage.setCallTime(300);}@Overridepublic void addPrice() {chinaMobilePackage.setPrice(15);}@Overridepublic ChinaMobilePackage getResult() {return chinaMobilePackage;}}//动感地带建造者类
public class MZoneBuilder implements ChinaMobilePackageBuilder {private ChinaMobilePackage chinaMobilePackage = new ChinaMobilePackage();@Overridepublic void addName() {chinaMobilePackage.setName("动感地带");}@Overridepublic void addFlow() {chinaMobilePackage.setFlow(500);}@Overridepublic void addMessage() {chinaMobilePackage.setMessage(200);}@Overridepublic void addCallTime() {chinaMobilePackage.setCallTime(30);}@Overridepublic void addPrice() {chinaMobilePackage.setPrice(38);}@Overridepublic ChinaMobilePackage getResult() {return chinaMobilePackage;}}

  最后是导演类

public class Director {//指挥建筑过程,是有顺序区别的public void construct(ChinaMobilePackageBuilder builder){builder.addName();builder.addCallTime();builder.addFlow();builder.addPrice();builder.addMessage();}
}

  客户端

public class POC {public static void main(String[] args) {Director director = new Director();ChinaMobilePackageBuilder builder1 = new EasyOwnBuilder();ChinaMobilePackageBuilder builder2 = new MZoneBuilder();director.construct(builder1);ChinaMobilePackage product = builder1.getResult();product.show();director.construct(builder2);product = builder2.getResult();product.show();}
}

  建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。建造对象的过程会更加清晰,控制更加精确。创建对象时可以保证顺序和步骤不会变,产品便不会有结构上的缺失。客户端创建对象时,不必关系创建过程,对象的创建和表现分离,表示独立于过程,而且相同的建造过程也能获得不同的对象。

  但是如果产品细节和组成部分差异较大,则不适合使用建造者模式。

转载于:https://www.cnblogs.com/adamJin/p/7086053.html

设计模式笔记 ------ 建造者模式相关推荐

  1. 建造者模式java_java设计模式3——建造者模式

    java设计模式3--建造者模式 1.建造者模式介绍: 建造者模式属于创建型模式,他提供了一种创建对象得最佳方式 定义: 将一个复杂对象的构建和与它的表示分离,使得同样的构建过程可以创建不同的表示 主 ...

  2. Java设计模式(建造者模式-适配器模式-桥接模式)

    Java设计模式Ⅲ 1.建造者模式 1.1 建造者模式概述 1.2 建造者模式的注意事项和细节 1.3 代码理解 2.适配器模式 2.1 类适配器模式 2.1.1 代码理解 2.2 对象适配器模式 2 ...

  3. 折腾Java设计模式之建造者模式

    博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...

  4. java设计模式 建造模式_理解java设计模式之建造者模式

    理解java设计模式之建造者模式 发布于 2020-12-10| 复制链接 摘记: 建造者模式(Builder Pattern)主要用于"分步骤构建一个复杂的对象",在这其中&qu ...

  5. 建造者模式 php,PHP设计模式之建造者模式定义与用法简单示例

    本文实例讲述了PHP设计模式之建造者模式.分享给大家供大家参考,具体如下: 建造者模式: 将复杂对象的创建过程和表示进行分离(好吧,我也看不懂什么意思1). 来点我人类能听懂的话: 1.在客户端看来需 ...

  6. 设计模式笔记——代理模式

    设计模式笔记--代理模式 代理模式介绍 代理模式通常是介于请求方和提供方的一个中介系统,请求方是发送请求的一方,提供方是根据请求提供相应资源的一方 Web中的代理服务器就是一个例子,客户端向代理服务器 ...

  7. C#设计模式之四建造者模式(Builder Pattern)【创建型】

    一.引言 今天我们要讲讲Builder模式,也就是建造者模式,当然也有叫生成器模式的,英文名称是Builder Pattern.在现实生活中,我们经常会遇到一些构成比较复杂的物品,比如:电脑,它就是一 ...

  8. 学习《图说设计模式》建造者模式

    图说设计模式之建造者模式 1. 模式动机 无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮.方向盘.发送机等各种部件.而对于大多数用户而言,无须知道这 ...

  9. 实践GoF的23种设计模式:建造者模式

    本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:建造者模式>,作者: 元闰子. 简述 在程序设计中,我们会经常遇到一些复杂的对象,其中有很多成员属性,甚至嵌套着多个复杂的对象 ...

  10. java设计模式之建造者模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

最新文章

  1. Qt学习笔记之数据库
  2. 特设三场!!快来看看 NVIDIA DLI 深度学习入门课程有没来到你的城市~
  3. 国产数据库助力民航核心交易系统
  4. python生成手写文字图片_使用PHP辅助 快速制作一套自己的手写字体实践
  5. 实验:JS判断浏览器中英文版本
  6. 企业微信自动打卡脚本
  7. ps考试没有保存html,PS未正常关闭,未保存的文件该怎么恢复
  8. Review (Homography+Camera calibration) and others(Week 7 + Week 8)
  9. 如何利用Pycharm将工程文件上传到服务器
  10. Macbook Pro 外接显卡实现Tensorflow GPU运行之MacOS系统重装
  11. 《离散数学》期末练习题
  12. 基于STM32的电阻、电容测量(NE555芯片RC振荡法)
  13. 一文读懂多分类的评价指标(微平均、宏平均、加权平均)
  14. 网易起花名,阿里赚吆喝
  15. 简论数控机床的特点及发展趋势
  16. 达梦7数据库安装教程
  17. 【开发记录】基于C++,使用QT+VS编写软件
  18. MGRE GRE PPP协议综合运用
  19. 实用的万兴全能格式转换器:UniConverter for Mac中文版
  20. vmware配置共享存储

热门文章

  1. windows7 x64x86专业纯净版(usb3.0_nvme)2019.12.17
  2. linux内核下载 ok6410,手把手教你移植linux内核---------OK6410(一)
  3. kali破解wifi 密码(仅供学习)
  4. 向量ab怎么用计算机打出来,向量怎么用wps打出来
  5. 优化高德地图加载出现白色
  6. 大数据处理的五大关键技术及其应用
  7. mysql数据库云读取文件_mysql读取txt数据库
  8. 遭DeFi反噬,以太坊绝地反击
  9. 6 大神器在手,难怪是无敌的
  10. 基于ROS的机器人模型建立及3D仿真【物理/机械意义】