首页 > 其他 > 详细

[设计模式]设计模式课程(十)--构建器模式

时间:2020-06-02 15:55:15      阅读:39      评论:0      收藏:0      [点我收藏+]

概述

  • 有时面临“一个复杂对象”的的创建工作,通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂的对象各个部分经常面临着剧烈的变化,但将他们组合在一起的算法却相对稳定
  • 将一个复杂对象的构建(HouseBuilder)与其表示(House)相分离,使得同样的构建过程(稳定)可以创建不同的表示(变化)
  • 用于“分步骤构建一个复杂对象”,分步骤是个稳定算法,而复杂对象的各个部分经常变化
  • 变化点在哪里,封装哪里。主要应对“复杂对象各个部分”的频繁需求变动,缺点在于难以应对“分步骤构建算法”的需求变动
  • construct不稳定--虚函数,子类--参数和返回值变化--基类,子类
  • 注意不同语言中构造器内调用虚函数的差别(C++,C#)

技术分享图片

示例 

builder.cpp

技术分享图片
 1 class House{
 2     //....
 3 };
 4 
 5 class HouseBuilder {
 6 public:
 7     House* GetResult(){
 8         return pHouse;
 9     }
10     virtual ~HouseBuilder(){}
11 protected:
12     
13     House* pHouse;
14     virtual void BuildPart1()=0;
15     virtual void BuildPart2()=0;
16     virtual void BuildPart3()=0;
17     virtual void BuildPart4()=0;
18     virtual void BuildPart5()=0;
19     
20 };
21 
22 class StoneHouse: public House{
23     
24 };
25 
26 class StoneHouseBuilder: public HouseBuilder{
27 protected:
28     
29     virtual void BuildPart1(){
30         //pHouse->Part1 = ...;
31     }
32     virtual void BuildPart2(){
33         
34     }
35     virtual void BuildPart3(){
36         
37     }
38     virtual void BuildPart4(){
39         
40     }
41     virtual void BuildPart5(){
42         
43     }
44     
45 };
46 
47 
48 class HouseDirector{
49     
50 public:
51     HouseBuilder* pHouseBuilder;
52     
53     HouseDirector(HouseBuilder* pHouseBuilder){
54         this->pHouseBuilder=pHouseBuilder;
55     }
56     
57     House* Construct(){
58         
59         pHouseBuilder->BuildPart1();
60         
61         for (int i = 0; i < 4; i++){
62             pHouseBuilder->BuildPart2();
63         }
64         
65         bool flag=pHouseBuilder->BuildPart3();
66         
67         if(flag){
68             pHouseBuilder->BuildPart4();
69         }
70         
71         pHouseBuilder->BuildPart5();
72         
73         return pHouseBuilder->GetResult();
74     }
75 };
View Code

技术分享图片

 

[设计模式]设计模式课程(十)--构建器模式

原文:https://www.cnblogs.com/cxc1357/p/12310264.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!