建造者模式
时间:2022-04-26
本文章向大家介绍建造者模式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、简介:
1、建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
2、建造者模式通常包括下面几个角色:
(1)builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。
(2)ConcreteBuilder:继承builder类,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。
(3)Director:控制建造过程,用来隔离用户与建造过程的关联。
(4)Product:要创建的复杂对象。
个人感觉建造者模式有点像是像是工厂模式和策略模式的一个综合,先用builder生产product,然后用Director来指挥隔离与用户的耦合程度。
3、举例:设计一个设置游戏人物脸部特征的程序,其中眼睛、耳朵、鼻子、嘴、眉毛都是可以设置的Product
4、UML
5、所属类别:创建型
二、C++程序
1 // 设计模式.cpp : 定义控制台应用程序的入口点。
2 //
3
4 #include "stdafx.h"
5 #include<iostream>
6 #include<string>
7 using namespace std;
8 //产品类
9 class Product
10 {
11 private:
12 string brow;
13 string eyes;
14 //string ears;
15 //string nose;
16 //string mouse;
17 public:
18 Product(){}
19 ~Product(){}
20 void set_brow(string b)
21 {
22 brow=b;
23 }
24 void set_eyes(string e)
25 {
26 eyes=e;
27 }
28 void show()
29 {
30 cout<<brow<<endl;
31 cout<<eyes<<endl;
32 }
33 };
34 //抽象建造者类
35 class Builder
36 {
37 public:
38 Builder(){}
39 virtual ~Builder(){}
40 virtual void build_brow()=0;
41 virtual void build_eyes()=0;
42 virtual Product * getresult()=0;
43 };
44 //具体造者类1
45 class Conbuilder1:public Builder
46 {
47 private:
48 Product* product;
49 public:
50 Conbuilder1()
51 {
52 product=new Product();
53 }
54 virtual ~Conbuilder1(){}
55 virtual void build_brow()
56 {
57 product->set_brow("浓眉");
58 }
59 virtual void build_eyes()
60 {
61 product->set_eyes("丹凤眼");
62 }
63 virtual Product * getresult()
64 {
65 return product;
66 }
67 };
68 //具体造者类2
69 class Conbuilder2:public Builder
70 {
71 private:
72 Product* product;
73 public:
74 Conbuilder2()
75 {
76 product=new Product();
77 }
78 virtual ~Conbuilder2(){}
79 virtual void build_brow()
80 {
81 product->set_brow("柳叶眉");
82 }
83 virtual void build_eyes()
84 {
85 product->set_eyes("三角眼");
86 }
87 virtual Product * getresult()
88 {
89 return product;
90 }
91 };
92 //指挥者
93 class Director
94 {
95 public:
96 Director(Builder * builder)
97 {
98 builder->build_brow();
99 builder->build_eyes();
100 }
101 ~Director(){}
102 };
103 int _tmain(int argc, _TCHAR* argv[])
104 {
105 Conbuilder1 *conbuilder1=new Conbuilder1();
106 Director *director=new Director(conbuilder1);
107 Product * product1=conbuilder1->getresult();
108 product1->show();
109 return 0;
110 }
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python的数字与字符串相互转换
- 坑!url中含有中文导致nginx 400。锅是tomcat的
- pytest文档43-元数据使用(pytest-metadata)
- Python | 面试的常客,经典的生产消费者模式
- LeetCode 87,因为题目晦涩而被点了1500+反对的搜索问题
- LeetCode 87,远看是字符串其实是搜索,你能做出来吗?
- Golang中的interface是干嘛的?从面向对象中的多态与接口开始说起……
- pandas | DataFrame基础运算以及空值填充
- C++设计模式笔记(08) - Factory Method工厂方法
- 【Code】GraphSAGE 源码解析
- Kafka常见的导致重复消费原因和解决方案
- 近30个MySQL常用函数,必须推荐!
- 搞定 CompletableFuture,并发异步编程和编写串行程序还有什么区别?你们要的多图长文
- 用注解实现 MyBatis 开发
- MyBatis 实现数据的增删改查