zoukankan      html  css  js  c++  java
  • 每日日报9——软件设计⑤|建造者模式(计算机组装)

    一、建造者模式

    https://baike.baidu.com/item/%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F/3229729?fr=aladdin

    二、版本

    (一)C++版本:

    ① 类图:

    ② 效果:

    ③ 代码:

    main.cpp

      1 #include <iostream>
      2 #include <string>
      3 #include <list>
      4 using namespace std;
      5 
      6 //产品类,一般有多个部件构成
      7 class Computer
      8 {
      9 public:
     10     //函数功能:给电脑选择一个配件
     11     //参数:    string componentName[IN]                   -- 配件名称
     12     //返回值:  无
     13     void Select(string componentName)
     14     {
     15         this->m_ComponentsList.push_back(componentName);
     16     }
     17 
     18     //函数功能:显示电脑配件清单
     19     //参数:    无
     20     //返回值:  无
     21     void ShowComponets()
     22     {
     23         cout << "该款电脑配置清单如下:" << endl;
     24         list<string>::iterator iter;
     25         for (iter = this->m_ComponentsList.begin(); iter != this->m_ComponentsList.end(); ++iter)
     26         {
     27             cout << *iter << endl;
     28         }
     29     }
     30 private:
     31     list<string> m_ComponentsList;                 //电脑配件列表
     32 };
     33 
     34 //建造者类
     35 class Abstract_Builder
     36 {
     37 public:
     38     virtual void BuildCpu() = 0;                  //抽象CPU构建函数
     39     virtual void BuildMemory() = 0;               //抽象内存构建函数
     40     virtual void BuildHD() = 0;                   //抽象硬盘构建函数
     41     virtual void BuildHost() = 0;               //抽象主机构建函数
     42     virtual void BuildVideoCard() = 0;            //抽线显卡构建函数
     43 
     44     virtual Computer GetComputer() = 0;            //抽象获取产品函数
     45 };
     46 
     47 //具体建造者类1,用于构建笔记本电脑
     48 class NotebookComputerBuilder :public Abstract_Builder
     49 {
     50 public:
     51     void BuildCpu()                             //具体CPU构建函数
     52     {
     53         this->m_Computer.Select("笔记本电脑CPU");
     54     }
     55 
     56     void BuildMemory()                           //具体内存构建函数
     57     {
     58         this->m_Computer.Select("笔记本电脑内存");
     59     }
     60 
     61     void BuildHD()                           //具体硬盘构建函数
     62     {
     63         this->m_Computer.Select("笔记本电脑硬盘");
     64     }
     65 
     66     void BuildHost()                           //具体主机构建函数
     67     {
     68         this->m_Computer.Select("笔记本电脑主机");
     69     }
     70 
     71     void BuildVideoCard()                      //具体显卡构建函数
     72     {
     73         this->m_Computer.Select("笔记本电脑显卡");
     74     }
     75 
     76     Computer GetComputer()                      //具体获取产品函数
     77     {
     78         return this->m_Computer;
     79     }
     80 private:
     81     Computer m_Computer;                        //产品对象
     82 };
     83 
     84 
     85 //具体建造者类1,用于构建台式机电脑
     86 class DesktopComputerBuilder :public Abstract_Builder
     87 {
     88 public:
     89     void BuildCpu()                             //具体CPU构建函数
     90     {
     91         this->m_Computer.Select("台式机电脑CPU");
     92     }
     93 
     94     void BuildMemory()                           //具体内存构建函数
     95     {
     96         this->m_Computer.Select("台式机电脑内存");
     97     }
     98 
     99     void BuildHD()                           //具体硬盘构建函数
    100     {
    101         this->m_Computer.Select("台式机电脑硬盘");
    102     }
    103 
    104     void BuildHost()                           //具体主机构建函数
    105     {
    106         this->m_Computer.Select("台式机电脑主机");
    107     }
    108 
    109     void BuildVideoCard()                      //具体显卡构建函数
    110     {
    111         this->m_Computer.Select("台式机电脑显卡");
    112     }
    113 
    114     Computer GetComputer()                      //具体获取产品函数
    115     {
    116         return this->m_Computer;
    117     }
    118 private:
    119     Computer m_Computer;                        //产品对象
    120 };
    121 
    122 //指挥者类,用来指挥构建的过程
    123 class Assember
    124 {
    125 public:
    126     //函数功能:组装电脑
    127     //参数:    Abstract_Builder builder[IN]                  -- 构建者
    128     //返回值:  无
    129     void Assembly(Abstract_Builder* builder)
    130     {
    131         builder->BuildCpu();
    132         builder->BuildMemory();
    133         builder->BuildHD();
    134         builder->BuildHost();
    135         builder->BuildVideoCard();
    136     }
    137 };
    138 
    139 int main()
    140 {
    141     Assember pcAssember;
    142 
    143     //组装笔记本电脑
    144     cout << "--开始组装笔记本电脑--" << endl;
    145 
    146     //组装游戏电脑
    147     Abstract_Builder* pBuilder1 = new NotebookComputerBuilder();
    148     if (NULL != pBuilder1)
    149     {
    150         pcAssember.Assembly(pBuilder1);
    151 
    152         Computer pc = pBuilder1->GetComputer();
    153         pc.ShowComponets();
    154 
    155         delete pBuilder1;
    156         pBuilder1 = NULL;
    157     }
    158     cout << "组装成功!" << endl;
    159 
    160     //组装台式机电脑
    161     cout << "--开始组装台式机电脑--" << endl;
    162 
    163     Abstract_Builder* pBuilder2 = new DesktopComputerBuilder();
    164     if (NULL != pBuilder2)
    165     {
    166         pcAssember.Assembly(pBuilder2);
    167 
    168         Computer pc = pBuilder2->GetComputer();
    169         pc.ShowComponets();
    170 
    171         delete pBuilder2;
    172         pBuilder2 = NULL;
    173     }
    174     cout << "组装成功!" << endl;
    175 
    176     getchar();
    177     return 0;
    178 }

    参考链接:https://blog.csdn.net/u014337397/article/details/80385647

    (二)Java版本

    ①类图:

    ②效果图:

    ③目录结构:

    ④代码:

    Builder.java

     1 package assembly;
     2 
     3 public abstract class Builder {
     4     // 组装CPU
     5     public abstract Builder buildCPU(String cpu);
     6 
     7     // 组装显示器
     8     public abstract Builder buildDisplay(String display);
     9 
    10     // 组装内存
    11     public abstract Builder buildMemory(String memory);
    12 
    13     // 组装硬盘
    14     public abstract Builder buildHD(String HD);
    15 
    16     //组装主机
    17     public abstract Builder buildHost(String host);
    18     
    19     // 完成组装
    20     public abstract Computer create();
    21 }

    Computer.java

     1 package assembly;
     2 
     3 public abstract class Computer {
     4     private String mCPU;
     5     private String mDisplay;
     6     private String mMemory;
     7     private String mHD;
     8     private String mHost;
     9 
    10     // 配置CPU
    11     public void setmCPU(String mCPU) {
    12         this.mCPU = mCPU;
    13     }
    14 
    15     // 配置显示器
    16     public void setmDisplay(String mDisplay) {
    17         this.mDisplay = mDisplay;
    18     }
    19 
    20     // 配置内存
    21     public void setmMemory(String mMemory) {
    22         this.mMemory = mMemory;
    23     }
    24 
    25     // 配置硬盘
    26     public void setmHD(String mHD) {
    27         this.mHD = mHD;
    28     }
    29 
    30     // 配置主机
    31     public void setmHost(String mHost) {
    32         this.mHost = mHost;
    33     }
    34 
    35     public String listHardware() {
    36         return mCPU + '
    ' + mDisplay + '
    ' + mMemory + '
    ' + mHD + '
    ' + mHost;
    37     }
    38 }

    Main.java

     1 package assembly;
     2 
     3 public class Main {
     4     public static void main(String[] args) {
     5         //初始化建造器
     6         Builder builer = new MyComputerBuilder();
     7         //需要的配置为Intel CPU,AOC显示器,8G内存
     8         Computer computer = builer.buildCPU("组装CPU成功").buildDisplay("组装显示器成功").buildMemory("组装内存成功").buildHD("组装硬盘成功").buildHost("组装主机成功").create();
     9         System.out.println(computer.listHardware()+'
    '+"组装完成!");
    10     }
    11 }

    MyComputer.java

    1 package assembly;
    2 
    3 public class MyComputer extends Computer {
    4     protected MyComputer() {
    5     };
    6 }

    MyComputerBuilder.java

     1 package assembly;
     2 
     3 public class MyComputerBuilder extends Builder {
     4     private Computer mComputer = new MyComputer();
     5 
     6     @Override
     7     public Builder buildCPU(String cpu) {
     8         mComputer.setmCPU(cpu);
     9         return this;
    10     }
    11 
    12     @Override
    13     public Builder buildDisplay(String display) {
    14         mComputer.setmDisplay(display);
    15         return this;
    16     }
    17 
    18     @Override
    19     public Builder buildMemory(String memory) {
    20         mComputer.setmMemory(memory);
    21         return this;
    22     }
    23 
    24     @Override
    25     public Builder buildHD(String HD) {
    26         mComputer.setmHD(HD);
    27         return this;
    28     }
    29 
    30     @Override
    31     public Builder buildHost(String host) {
    32         mComputer.setmHost(host);
    33         return this;
    34     }
    35 
    36     @Override
    37     public Computer create() {
    38         return mComputer;
    39     }
    40 
    41 }
  • 相关阅读:
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    fzu2020软工作业5
    [fiddler] 使用AutoResponder功能修改http响应
    [jest] 史莱姆也能学会的前端测试
    fzu2020软工作业3
    fzu2020软工作业4
    fzu2020软工作业2
    [python] 简易代码量统计脚本
  • 原文地址:https://www.cnblogs.com/miao-com/p/15366997.html
Copyright © 2011-2022 走看看