浅析设计模式(七)——创建型模式之Builder(建造者模式)

建造者模式Builder

本文的内容:

一、建造者模式的定义

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

  可以理解为对象的分步构建或者逐步完善。

二、建造者模式的参与者及其角色

1. Builder:

  • 为创建一个产品对象的各个部件指定抽象接口。

2. ConcreteBuilder:

  • 实现Builder的接口以构造和装配该产品的各个部件。
  • 定义并明确它所创建的表示。
  • 并提供一个检索产品的接口。

3. Director

  • 构造一个使用Builder接口的对象。

4. Product

  • 表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程
  • 包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

三、建造者模式的类图

 四、建造者模式的示例

  下面是一个比较简单粗暴的栗子:

1. Builder:创建对象的抽象接口定义

  这定义了一个接口,接口中的方法时对象相关部件的创建方式。

1 public interface WeatherBuilder {
2
3     public void setTemperature(double temperature);
4     public void setHumidity(double humidity);
5     public void setWeatherDescribe(String weatherDescribe);
6     public Weather buildWeather();
7 }

2. ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件。

  这是一些具体的实现。实现一:HotWeatherBuilder,代表炎热的天气。

 1 public class HotWeatherBuilder implements WeatherBuilder{
 2
 3     private Weather weather;
 4     public HotWeatherBuilder() {
 5         weather = new Weather();
 6         System.out.println("Build HotWeatherBuilder");
 7     }
 8     @Override
 9     public void setTemperature(double temperature) {
10         this.weather.setTemperature(temperature);
11     }
12
13     @Override
14     public void setHumidity(double humidity) {
15         this.weather.setHumidity(humidity);
16     }
17
18     @Override
19     public void setWeatherDescribe(String weatherDescribe) {
20         this.weather.setWeatherDescribe(weatherDescribe);
21     }
22
23     @Override
24     public Weather buildWeather() {
25         return this.weather;
26     }
27
28 }

  实现二:ColdWeatherBuilder代表寒冷天气。

 1 public class ColdWeatherBuilder implements WeatherBuilder{
 2
 3     private Weather weather;
 4     public ColdWeatherBuilder(){
 5         weather = new Weather();
 6         System.out.println("Build ColdWeatherBuilder");
 7     }
 8     @Override
 9     public void setTemperature(double temperature) {
10         this.weather.setTemperature(temperature);
11     }
12
13     @Override
14     public void setHumidity(double humidity) {
15         this.weather.setHumidity(humidity);
16     }
17
18     @Override
19     public void setWeatherDescribe(String weatherDescribe) {
20         this.weather.setWeatherDescribe(weatherDescribe);
21     }
22
23     @Override
24     public Weather buildWeather() {
25         return this.weather;
26     }
27
28 }

3. Director:构造一个使用Builder接口的对象。

  这里用main方法直接干,其实把调用具体的构建过程再做个封装会好点。。。

 1 public class BuilderTestApp {
 2     //Here we use main-test as a Director
 3     public static void main(String[] args) {
 4         //use the Builder
 5         WeatherBuilder hwb = new HotWeatherBuilder();
 6         hwb.setHumidity(90.0);
 7         hwb.setTemperature(35.0);
 8         hwb.setWeatherDescribe("It is too hot.");
 9         //then get the product
10         Weather hw = hwb.buildWeather();
11         System.out.println("Humidity : " + hw.getHumidity());
12         System.out.println("Temperature : " + hw.getTemperature());
13         System.out.println("WeatherDescribe : " + hw.getWeatherDescribe());
14
15         WeatherBuilder cwb = new ColdWeatherBuilder();
16         cwb.setHumidity(30.0);
17         cwb.setTemperature(-5.0);
18         cwb.setWeatherDescribe("It is too cold.");
19         Weather cw = cwb.buildWeather();
20         System.out.println("Humidity : " + cw.getHumidity());
21         System.out.println("Temperature : " + cw.getTemperature());
22         System.out.println("WeatherDescribe : " + cw.getWeatherDescribe());
23     }
24 }

4. Product:具体的对象,内部有各个组件的装配方式。

 1 public class Weather {
 2
 3     private double temperature;
 4     private double humidity;
 5     private String weatherDescribe;
 6     //all getters and setters
 7     public double getTemperature() {
 8         return temperature;
 9     }
10     public void setTemperature(double temperature) {
11         this.temperature = temperature;
12     }
13     public double getHumidity() {
14         return humidity;
15     }
16     public void setHumidity(double humidity) {
17         this.humidity = humidity;
18     }
19     public String getWeatherDescribe() {
20         return weatherDescribe;
21     }
22     public void setWeatherDescribe(String weatherDescribe) {
23         this.weatherDescribe = weatherDescribe;
24     }
25 }

 五、参考

1、参考《Head First设计模式》和GoF《设计模式:可复用面向对象软件的基础》

2、代码可参考【github传送门】、UML类图参考【github传送门

原文地址:https://www.cnblogs.com/wpbxin/p/9313466.html

时间: 2024-10-16 16:49:30

浅析设计模式(七)——创建型模式之Builder(建造者模式)的相关文章

设计模式3 创建型模型

设计模式3 创建型模型 目录: 简单工厂模式 工厂方法模式 抽象工厂模式 单例模式 简单工厂 模型 [email protected]:~$ cat main.cpp  //设计模式:简单工厂 模型 #include<iostream> using namespace std; class Fruit { public: Fruit(string kind) { this->kind = kind; if(kind == "apple") {} else if (ki

设计模式之创建型模式(上)

没有总结的学习不算学习,这一个月的学习可谓收获多多啊,接下来与大家分享一下. 一.设计模式的分类 总体来说设计模式分为三大类: 1.创建型模式,共五种. 2.结构型模式,共七种. 3.行为型模式,共十一种. 首先研究创建型模式 二. 概述 创建型模式,就是用来创建对象的模式,抽象了实例化的过程.它帮助一个系统独 立于如何创建.组合和表示它的那些对象. 三. 为什么需要创建型模式 所有的创建型模式都有两个永恒的主旋律: 第一,它们都将系统使用哪些具体类的信息封装起来: 第二,它们隐藏了这些类的实例

设计模式(五) : 创建型模式--建造者模式

建造者模式的意图是将产品的内部表象和产品的生产过程分割开来. 类图: 示意性代码: package com.javadesignpattern.builder; public interface Builder { public void buildPart1(); public void buildPart2(); public Product retrieveProduct(); } ? 1 2 3 4 5 6 7 package com.javadesignpattern.builder;

设计模式 (创建型模式)

  设计模式 创建型模式 1.创建型模式         创建型模式,包括了5种设计模式,分别是 Singleton (单例模式),Factory(工厂模式),AbstractFactory(抽象工厂模式),Builder(创建者),Prototype(原型) ,创建型模式主要作用就是抽象了实例化过程.他们帮助一个系统独立于如何创建.组合和表示他的那些对象.一个类创建型模式使用继承改变被实例化的类.而一个对象创建型模式将实例化委托给另一个对象. 2.Singleton (单例模式)      单

设计模式系列 - 创建型模式

单例模式 懒汉式,线程不安全. 除非是单线程程序,否则不推荐使用. public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } 饿汉式,线程安全 当程序总是使用这个

java设计模式-创建型

1.设计模式介绍 1.1 设计模式的概念 1.设计模式是一套被反复使用,多数人知晓,经过分类编码目的的优秀代码设计经验的总结. 2.设计模式贯彻的原理:面向接口编程,而不是面向对象实现. 3.设计模式的目标:降低耦合性,增强灵活性. 1.2 设计模式的要素 1.模式名称 2.问题 3.环境与初始环境 4.解决方案 5.效果 6.举例 7.末态环境 8.推理 9.其他有关模式 10.已知的应用 1.3设计模式的分类 1.创建型 1.1  单例模式 1.2  工厂模式 1.3  抽象工厂模式 1.4

&quot;围观&quot;设计模式(29)--创建型设计模式总结(单例、工厂、原型、创建者)

设计模式源码下载地址 设计模式源码下载地址 1  单例模式 单例模式,也叫单子模式,是一种常用的软件设计模式.在应用这个模式时,单例对象的类必须保证只有一个实例存在.许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为.比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息.这种方式简化了在复杂环境下的配置管理.----维基百科(WIKIPEDIA) 个人的理解: 单例模式概

一天一个设计模式——Builder建造者模式

一.模式说明 在现实世界中,当我们要构造一个大型工程时(建一个大楼),通常的做法是先建造工程的每个独立部分,然后再逐步构造完成(先打地基,再搭框架,最后逐层累造).在程序设计领域,构造一个复杂的类时(或一些具有类似结构的复杂类时),也可以采用类似的思想:如果要创建一个用于构造文档的类(或者是word,或者是html),虽然具体的文档有不同的结构,但是构造这些对象有相同的套路:创建标题,创建内容,创建条目,结束文档.Builder建造者模式就是用来构造复杂的类的. 二.模式类图 三.模式时序图 四

设计模式学习总结:(9)建造者模式

builder模式,即建造者模式,和前面的工厂一样都是用于解决对象创建的问题. 意图: 将一个复杂对象的构建与它的实现分离,使得同样的构建过程可以创建不同的表示. 问题抛出,什么是复杂对象的构建过程. 代码: class Car { public: void Init() //构造 { this->designPrototype(); for (int i = 0; i < 4; i++) { this->wheelInstall(i); } this->smartInit();