zoukankan      html  css  js  c++  java
  • 软件设计建造者模式

    使用建造者模式,完成下述任务:计算机组装工厂可以将CPU、内存、硬盘、主机等硬件设备组装在一起构成计算机,计算机的类型可以是笔记本,也可以是台式机。

    类图

    代码

    java

    package rjsj.no5;
    
    public class SubComputerBuilderLaptop extends ComputerBuilder{
        public void buildCPU() {
            computer.setCPU("使用移动端CPU");
        }
        public void buildRAM(){
            computer.setRAM("使用移动端内存条");
        }
        public void buildROM(){
            computer.setROM("使用移动端硬盘");
        }
        public void buildMaster(){
           computer.setMaster("使用笔记本摸模具");
        }
    }
    package rjsj.no5;
    
    import javax.xml.parsers.*;
    import org.w3c.dom.*;
    import org.xml.sax.SAXException;
    import java.io.*;
    public class XMLUtil
    {
    //该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象
        public static Object getBean()
        {
            try
            {
                //创建文档对象
                DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder builder = dFactory.newDocumentBuilder();
                Document doc;                            
                doc = builder.parse(new File("src/rjsj/no5/config.xml"));
            
                //获取包含类名的文本节点
                NodeList nl = doc.getElementsByTagName("className");
                Node classNode=nl.item(0).getFirstChild();
                String cName=classNode.getNodeValue();
                
                //通过类名生成实例对象并将其返回
                Class c=Class.forName("rjsj.no5." + cName);
                  Object obj=c.newInstance();
                return obj;
               }   
                   catch(Exception e)
                   {
                       e.printStackTrace();
                       return null;
                   }
            }
    }
    package rjsj.no5;
    
    public class Client {
        public static void main(String args[]) {
    
            //动态确定组装的计算机种类(笔记本Laptop/台式机Desktop)
            ComputerBuilder computerBuilder=(ComputerBuilder) XMLUtil.getBean();
    
            //指定电脑公司员工为指挥者
            ComputerStaff staff = new ComputerStaff();
    
            //员工准备组装
            staff.setComputerBuilder(computerBuilder);
    
            //用户获得产品
            Computer computer = staff.construct();
            
            System.out.println("计算机组成:");
            System.out.println(computer.getMaster());
            System.out.println(computer.getCPU());
            System.out.println(computer.getRAM());
            System.out.println(computer.getROM());
        }
    }
    package rjsj.no5;
    
    public class Computer {
        //零部件
        private String CPU;
        private String RAM;
        private String ROM;
        private String Master;
    
        public String getCPU() {
            return CPU;
        }
    
        public void setCPU(String CPU) {
            this.CPU = CPU;
        }
    
        public String getRAM() {
            return RAM;
        }
    
        public void setRAM(String RAM) {
            this.RAM = RAM;
        }
    
        public String getROM() {
            return ROM;
        }
    
        public void setROM(String ROM) {
            this.ROM = ROM;
        }
    
        public String getMaster() {
            return Master;
        }
    
        public void setMaster(String master) {
            Master = master;
        }
    }
    package rjsj.no5;
    
    public abstract class ComputerBuilder {
        protected Computer computer = new Computer();
        public abstract void buildCPU();
        public abstract void buildRAM();
        public abstract void buildROM();
        public abstract void buildMaster();
        public Computer getComputer(){
            return computer;
        }
    }
    package rjsj.no5;
    
    public class ComputerStaff {
        private ComputerBuilder computerBuilder;
        public void setComputerBuilder(ComputerBuilder computerBuilder){
            this.computerBuilder = computerBuilder;
        }
        public Computer construct(){
            computerBuilder.buildCPU();
            computerBuilder.buildRAM();
            computerBuilder.buildROM();
            computerBuilder.buildMaster();
            return computerBuilder.getComputer();
        }
    
    }
    package rjsj.no5;
    
    public class SubComputerBuilderDesktop extends ComputerBuilder{
        public void buildCPU() {
            computer.setCPU("使用桌面端CPU");
        }
        public void buildRAM(){
            computer.setRAM("使用桌面端内存条");
        }
        public void buildROM(){
            computer.setROM("使用桌面端硬盘");
        }
        public void buildMaster(){
            computer.setMaster("使用台式机机箱");
        }
    }
    <?xml version="1.0"?>
    <config>
        <className>SubComputerBuilderLaptop</className>
    </config>

    C++

    #include <iostream>
    
    using namespace std;
    
    class Computer{
    public:
        virtual void setCpu(){};
        virtual void setNc(){};
        virtual void setYp(){};
        virtual void setZj(){};
    };
    
    class LapComputer:public Computer{
    private:
        string CPU="";
        string nc="";
        string yp="";
    public:
        string tostring() {
            return "LapComputer [" + CPU + ", " + nc + ", " + yp + "]";
        }
    
        void setCpu() {
            // TODO Auto-generated method stub
             CPU="CPU";
        }
    
        void setNc() {
            // TODO Auto-generated method stub
             nc="内存条";
        }
    
        void setYp() {
            // TODO Auto-generated method stub
             yp="硬盘";
        }
    
        void setZj() {
            // TODO Auto-generated method stub
    
        }
    };
    
    class PCComputer:public Computer{
    private:
        string CPU="";
        string nc="";
        string yp="";
        string zj="";
    
    public:
        void setCpu() {
            // TODO Auto-generated method stub
             CPU="CPU";
        }
    
        void setNc() {
            // TODO Auto-generated method stub
             nc="内存条";
        }
    
        void setYp() {
            // TODO Auto-generated method stub
             yp="硬盘";
        }
    
        void setZj() {
            // TODO Auto-generated method stub
             zj="主机";
        }
    
        string tostring() {
            return "PCComputer [" + CPU + ", " + nc + ", " + yp + ", " + zj + "]";
        }
    
        string getCPU() {
            return CPU;
        }
    
        void setCPU(string cPU) {
            CPU = cPU;
        }
    
        string getNc() {
            return nc;
        }
    
        void setNc(string nc) {
             nc = nc;
        }
    
        string getYp() {
            return yp;
        }
    
        void setYp(string yp) {
             yp = yp;
        }
    
    };
    
    class Builder{
    public:
        virtual void produceCPU(){};
        virtual void produceNC(){};
        virtual void ProduceYP(){};
        virtual void ProduceZJ(){};
        virtual Computer* build(int n){};
    };
    
    class ConcreteBuilder:public Builder{
    private:
        Computer *cp;
    
    public:
        Computer* build(int t) {
            cout<<"正在安装... ..."<<endl;
            //1是笔记本  2是台式
            if(t==1) {
                LapComputer c;
                cp=&c;
                produceCPU();
                produceNC();
                ProduceYP();
                cout<<"笔记本安装成功"<<endl;
                cout<<c.tostring()<<endl;
            }
            else if(t==2) {
                PCComputer c;
                cp=&c;
                produceCPU();
                produceNC();
                ProduceYP();
                ProduceZJ();
                cout<<"台式电脑安装成功"<<endl;
                cout<<c.tostring()<<endl;
            }
            else {
                    ;
            }
        }
    
        void produceCPU() {
            // TODO Auto-generated method stub
             cp->setCpu();
            cout<<"安装CPU"<<endl;
        }
    
        void produceNC() {
            // TODO Auto-generated method stub
             cp->setNc();
            cout<<"安装内存条"<<endl;
        }
    
        void ProduceYP() {
            // TODO Auto-generated method stub
             cp->setYp();
            cout<<"安装硬盘"<<endl;
        }
    
        void ProduceZJ() {
            // TODO Auto-generated method stub
             cp->setZj();
            cout<<"安装主机"<<endl;
        }
    };
    
    
    int main()
    {
        int n;
        ConcreteBuilder b;
        Builder* bd=&b;
        cout<<"请选择你要的电脑类型  1为笔记本电脑 2位台式电脑"<<endl;
        cin>>n;
        if(n==1||n==2) {
            bd->build(n);
        }else {
            cout<<"请输入正确选项"<<endl;
        }
        return 0;
    }

    运行截图

  • 相关阅读:
    C#获取根目录的方法集合
    C# 获取文件MD5值的方法
    VS2015 搭建 Asp.net core 开发环境
    【Networking】容器网络大观 && SDN 资料汇总
    【Networking】flannel,pipework,weave,udp,vxlan,ovs等资料
    【K8s】Kubernetes 最近正在看的资料
    【GoLang】go 微服务框架 && Web框架学习资料
    【Eclipse】eclipse che 协作开发
    【Kubernetes】两篇文章 搞懂 K8s 的 fannel 网络原理
    【SpringBoot】SpringBoot 入门示例
  • 原文地址:https://www.cnblogs.com/Arisf/p/15685548.html
Copyright © 2011-2022 走看看