目 录CONTENT

文章目录

Java-软件设计模式实验-简单工厂和抽象工厂

~梓
2024-12-05 / 0 评论 / 1 点赞 / 88 阅读 / 0 字
温馨提示:
本文最后更新于2024-12-24,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

实验三 创建型设计模式

一、实验目的

1、掌握简单工厂模式基本结构;

2、掌握工厂模式结构与实现;

3、掌握抽象工厂模式的结构与实现;

4、理解简单工厂模式、工厂模式、抽象工厂模式的不同应用场景;

二、实验原理

1、简单工厂模式的原理

工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

2、抽象工厂模式的基本结构如下图:

抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品。当一个工厂等级结构,可以创建出分属于不同产品等级结构的一个产品族中的所有对象时,抽象工厂模式比工厂方法模式更为简单、更有效率。

三、实验内容

题目一:使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数“M”,则返回一个 Man对象,如果传入参数“W”,则返回一个 Woman对象。现需要增加一个新的Robot类,如果传入参数“R”,则返回一个Robot对象,对代码进行修改并注意“女娲”的变化。

[实验步骤]

(1)分析案例,采用简单工厂模式设计类图,确定简单工厂模式的角色。

(2)分析得到如下类图:

(3) 分析得到 Nvwa类充当工厂类,其中定义了工厂方法 makePerson()Person类充当抽象产品类,ManWomanRobot充当具体产品类。

(4) 完成全部代码,编译并运行结果。

题目一实验结果

画出的UML图如下所示:

Nvwa.java


public class Nvwa {

	public Nvwa() {

	}

	public void finalize() throws Throwable {

	}


	public Person makePerson(char arg) {
		switch (arg) {
			case 'M':
				return new Man();
			case 'W':
				return new Woman();
			case 'R':
				return new Robot();
			default:
				return null;
		}
	}

}

Person.java(接口)

public interface Person {

	public void eat();

	public void sleep();

}

Robot.java

public class Robot implements Person {

	public Robot(){

	}

	public void finalize() throws Throwable {

	}

	public void eat(){
		System.out.println("机器人吃东西");
	}

	public void sleep(){
		System.out.println("机器人睡觉");
	}

}

Woman.java

public class Woman implements Person {

	public Woman(){

	}

	public void finalize() throws Throwable {

	}

	public void eat(){
		System.out.println("女人吃东西");
	}

	public void sleep(){
		System.out.println("女人睡觉");
	}

}

Man.java

public class Man implements Person {

	public Man(){

	}

	public void finalize() throws Throwable {

	}

	public void eat(){
		System.out.println("男人吃东西");
	}

	public void sleep(){
		System.out.println("男人睡觉");
	}

}

Client.java(测试类)

public class Client {
    public static void main(String[] args) {
        Nvwa nvwa = new Nvwa();
        Person man = nvwa.makePerson('M');
        man.eat();
        man.sleep();

        Person woman = nvwa.makePerson('W');
        woman.eat();
        woman.sleep();

        Person robot = nvwa.makePerson('R');
        robot.eat();
        robot.sleep();

    }
}

结果

男人吃东西
男人睡觉
女人吃东西
女人睡觉
机器人吃东西
机器人睡觉

题目二:计算机包含内存(RAM)、CPU等硬件设备,根据下面的“产品等级结构-产品族”示意图,使用抽象工厂模式实现计算机设备创建过程并绘制相应的类图。

[实验步骤]

(1) 分析案例,采用抽象工厂模式设计类图,确定抽象工厂模式的角色。

(2) 分析确定类图。

分析题目需求

  • 题目要求使用抽象工厂模式实现计算机(包含 CPU、RAM 等硬件设备)创建过程,并绘制相应类图。
  • 首先需要确定抽象工厂、具体工厂、抽象产品和具体产品这几个角色。

确定角色

  • 抽象工厂(ComputerFactory):定义了创建 CPURAM的抽象方法 CreateCPU()CreateRAM(),这符合抽象工厂模式中抽象工厂的角色。
  • 具体工厂(PCBuilder 和 MacBuilder):分别实现了 ComputerFactory接口,并且具体实现了 CreateCPU()CreateRAM()方法来创建对应的产品,这是具体工厂的典型实现。
  • 抽象产品(CPU 和 RAM 接口):都定义了 display()方法,虽然方法体是 void,但这符合抽象产品定义产品行为的特点。
  • 具体产品(PcCPU、MacCPU、PcRAM、MacRAM):分别实现了 CPURAM接口中的 display()方法,这是具体产品对抽象产品功能的实现。

题目二实验结果

画出的UML图如下所示:

ComputerFactory.java(接口)

public interface ComputerFactory {

	public CPU CreateCPU();

	public RAM CreateRAM();

}

MacBuilder.java

public class MacBuilder implements ComputerFactory {

	public MacBuilder(){

	}

	public void finalize() throws Throwable {

	}

	public CPU CreateCPU(){
		return new MacCPU();
	}

	public RAM CreateRAM(){
		return new MacRAM();
	}

}

PCBuilder.java

public class PCBuilder implements ComputerFactory {

	public PCBuilder(){

	}

	public void finalize() throws Throwable {

	}

	public CPU CreateCPU(){
		return new PcCPU();
	}

	public RAM CreateRAM(){
		return new PcRAM();
	}

}

PcRAM.java

public class PcRAM implements RAM {

	public PcRAM(){

	}

	public void finalize() throws Throwable {

	}

	public void display(){
		System.out.println("我是PcRAM");
	}

}

PcCPU.java

public class PcCPU implements CPU {

	public PcCPU(){

	}

	public void finalize() throws Throwable {

	}

	public void display(){
		System.out.println("我是PcCPU");

	}

}

MacCPU.java

public class MacCPU implements CPU {

	public MacCPU(){

	}

	public void finalize() throws Throwable {

	}

	public void display(){
		System.out.println("我是MacCPU");
	}

}

MacRAM.java

public class MacRAM implements RAM {

	public MacRAM(){

	}

	public void finalize() throws Throwable {

	}

	public void display(){
		System.out.println("我是MacRAM");
	}

}

CPU.java(接口)

public interface CPU {

	public void display();

}

RAM.java(接口)

public interface RAM {

	public void display();

}

测试类Main.java

public class Main {
    public static void main(String[] args) {
        ComputerFactory macFactory = new MacBuilder();
        CPU macCPU = macFactory.CreateCPU();
        RAM macRAM = macFactory.CreateRAM();
        macCPU.display();
        macRAM.display();

        ComputerFactory pcFactory = new PCBuilder();
        CPU pcCPU = pcFactory.CreateCPU();
        RAM pcRAM = pcFactory.CreateRAM();
        pcCPU.display();
        pcRAM.display();
    }
}

结果

我是MacCPU
我是MacRAM
我是PcCPU
我是PcRAM
1

评论区