ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

设计模式:建造模式(组装电脑)

2022-03-21 21:02:27  阅读:207  来源: 互联网

标签:String Builder 建造 void 组装 电脑 computer 设计模式 public


一. 实验目的

  1. 了解建造模式创建复杂对象的基本思路和方法,熟悉该模式中各个对象角色的基本功能。
  2. 理解建造模式在进行复杂对象创建中,是如何实现复杂对象的构建过程与表示分离的。
  3. 熟悉建造模式的类图结构,并能利用该模式实现较为复杂对象的创建。

二. 实验内容

        通过如下对组装电脑的装配与获取过程描述,设计一个建造模式应用的场景。

  1. 销售人员来询问所装机器的配置
  2. 确定配置清单
  3. 准备装机配件
  4. 技术人员按组装流程装配相应电脑
  5. 整机交给客户

        在上述场景中确定模式应用的各个角色,并以配置的电脑主机作为所需的产品对象,进行产品创建。在该场景中,对于电脑主机的装配简化为如下5个标准步骤,作为创建该产品的基本过程。

  1. 将主板固定在机箱中(SetupMainBoard)
  2. 将CPU安装到主板上(SetupMainCPU)
  3. 将内存安装到主板上(SetupMemory)
  4. 将硬盘连接到主板上(SetupHardDisk)
  5. 将显卡安装到主板上(SetupVioeoCard)

并设置两种主机产品的表现形式,即办公主机(OfficeComputer)与游戏主机(GameComputer)。

三. 实验过程

应用场景:

        实现计算机的组装:用户去购买计算机时,销售人员会来询问所装机器的配置,可以根据自己的需要选购计算机的CPU、内存条、显卡、主板、硬盘等各个配件,在确定配置清单后,商家开始准备装机的配件,准备完成后,技术人员按组装流程装配相应电脑,最后会把装好的整机交给客户,用建造者模式解决这个问题。
       建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

类图

在这里插入图片描述

结构与实现

        建造者(Builder)模式由产品、抽象建造者、具体建造者、指挥者等 4 个要素构成,现在我们来分析其基本结构和实现方法。

  • 产品角色(Product):
    1.表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。
    2.包含定义组成部件的类,包括将这些部件配成最终产品的接口。
  • 抽象建造者(Builder):为创建一个Product对象的各个部件指定抽象接口。
  • 具体建造者(ConcreteBuilder):
    1.实现Builder的接口以构造和装配该产品的各个部件。
    2.定义并跟踪它所创建的表示。
    3.提供一个检索产品的接口(例如,GetACIIText和GetTextWidget)。
  • 指挥者(Director):构造一个被使用Builder接口的对象。

抽象建造者(Builder)

使用抽象类定义对应用场景电脑的重要部件的定义:

public abstract class Builder {
	protected String name;
	protected Computer computer;
		
	public String getname(){
		return name;
	}
	public void setname(String str){
		name=str;
	}
	
	public Computer getcomputer(){
		return computer;
	}
	public void setcomputer(Computer com){
		computer=com;
	}
	
	public Builder(){
		computer=new Computer();		
	}
	
	public abstract void setupMainBoard();
	public abstract void setupCPU();
	public abstract void setupHardDisk();
	public abstract void setupMemory();	
	public abstract void setupVideoCard();	

}

具体建造者(ConcreteBuilder)

        电脑的抽象定义出来了,接下来就要定义具体的组装,在这里设置了两种主机产品的表现形式,即办公主机(OfficeComputer)与游戏主机(GameComputer)。

  • 办公主机(OfficeComputer)的具体定义:
package Demo;

public class OfficeComputerBuilder extends Builder {
	public void setupMainBoard(){
		computer.setMainBoard("办公电脑主板");
	}
	public void setupCPU(){
		computer.setCPU("办公电脑处理器");
	}
	public void setupHardDisk(){
		computer.setHardDisk("办公电脑硬盘");
	}
	public void setupMemory(){
		computer.setMemory("办公电脑内存");
	}
	public void setupVideoCard(){
		computer.setVideoCard("办公电脑显卡");
	}

}
  • 游戏主机(GameComputer)的具体定义:
package Demo;

public class GameComputerBuilder extends Builder{
	public void setupMainBoard(){
		computer.setMainBoard("游戏电脑主板");
	}
	public void setupCPU(){
		computer.setCPU("游戏电脑处理器");
	}
	public void setupHardDisk(){
		computer.setHardDisk("游戏电脑硬盘");
	}
	public void setupMemory(){
		computer.setMemory("游戏电脑内存");
	}
	public void setupVideoCard(){
		computer.setVideoCard("游戏电脑显卡");
	}

}

产品角色(Product)

电脑已经定义好了,还有电脑产品的产品定义,表示被构建的复杂对象:

package Demo;

public class Computer {
	private String MainBoard;
	private String CPU;
	private String Memory;
	private String HardDisk;
	private String VideoCard;
	
	public String getMainBoard(){
		return MainBoard;
	}
	public void setMainBoard(String str){
		MainBoard=str;
	}
	
	public String getCPU(){
		return CPU;
	}	
	public void setCPU(String str){
		CPU=str;
	}
	
	public String getMemory(){
		return Memory;
	}	
	public void setMemory(String str){
		Memory=str;
	}
	
	public String getHardDisk(){
		return HardDisk;
	}	
	public void setHardDisk(String str){
		HardDisk=str;
	}
	public String getVideoCard(){
		return VideoCard;
	}	
	public void setVideoCard(String str){
		VideoCard=str;
	}
	
	public void ShowSysInfo(){
		System.out.println("=======主机部件配置信息=======");
		System.out.println("主板类型:"+MainBoard);
		System.out.println("CPU类型:"+CPU);
		System.out.println("内存类型:"+Memory);
		System.out.println("硬盘类型:"+HardDisk);
		System.out.println("显卡类型:"+VideoCard);
	}

}

指挥者(Director)

        指挥者定义,我们需要添加一个指挥者类,可以规范这个对象的创建,可以将复杂对象的创建和具体开来,用于构建复杂对象。通过指挥者帮助我们创建好实例:

package Demo;
//指定者定义,负责调度创建具体对象,创建实例
public class ComputerFactory {
	public void BuildComputer(Builder cb){
		System.out.println("开始组装部件>>>");	
		cb.setupMainBoard();
		cb.setupCPU();
		cb.setupHardDisk();
		cb.setupMemory();
		cb.setupVideoCard();
		System.out.println(">>>主机组装完成");
	}

}

客户端应用(Program)

        建造模式的外部客户端(Program)根本不需要知道其内部的具体细节,技术人员把客户需要的电脑组装好的整机给到客户,客户看的最终的电脑主机配置信息。

  • 假设是游戏主机(GameComputer)
package Demo;
//客户端应用
public class Program {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		ComputerFactory cf=new ComputerFactory();
		GameComputerBuilder gc=new GameComputerBuilder();
		cf.BuildComputer(gc);
		gc.getcomputer().ShowSysInfo();

	}

}
  • 假设是办公主机(OfficeComputer)
package Demo;
//客户端应用
public class Program {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		ComputerFactory cf=new ComputerFactory();
		OfficeComputerBuilder oc=new OfficeComputerBuilder();
		cf.BuildComputer(oc);
		oc.getcomputer().ShowSysInfo();

	}

}

四.调试和运行结果

        使用者客户端假设是配置的游戏主机,调用的是具体建造定义GameComputerBuilder那么最终的显示信息是:
在这里插入图片描述
        使用者客户端假设是配置的办公主机,调用的是具体建造定义OfficeComputerBuilder那么最终的显示信息是:
在这里插入图片描述

总结

        建造者模式的出现就是为了避免复杂对象的创建过程出现其他问题而出现的。通过对建造模式的这次学习,了解并掌握了建造模式的四个参与者:产品角色(Product)、抽象建造者(Builder)、具体建造者(ConcreteBuilder)指挥者(Director)的基本功能。

标签:String,Builder,建造,void,组装,电脑,computer,设计模式,public
来源: https://blog.csdn.net/m0_52406075/article/details/123641359

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有