简单工厂&工厂方法&抽象工厂

一、题目分析
1、简单工厂模式
使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,请实现该场景。现需要增加一个新的Robot类,如果传入参数R,则返回一个Robot对象,对代码进行修改并注意女娲的变化。
2、工厂方法模式
海尔工厂(Haier)生产海尔空调(HaierAirCondition),美的工厂(Midea)生产美的空调(MideaAirCondition) 。使用工厂方法模式描述该场景,绘制类图并编程实现。
3、抽象工厂模式
电脑配件生产工厂生产内存、CPU等硬件设备,这些内存、CPU的品牌、型号并不一定相同,根据下面的“产品等级结构-产品族”示意图,使用抽象工厂模式实现电脑配件生产过程并绘制相应的类图,绘制类图并编程实现。
在这里插入图片描述
二、类图设计(使用UML的类图结构设计)
1、简单工厂模式(女娲造人)

在这里插入图片描述
图2.1 女娲造人类图

2、工厂方法模式(空调)
在这里插入图片描述
图2.2 工厂生产空调类图

3、抽象工厂模式(电脑
在这里插入图片描述
图2.3 工厂生产电脑配件类图

三、程序实现
1、简单工厂模式(女娲造人)
(1)抽象类Person

public interface Person {
	public void makePerson();
}

(2)具体类Man

public class Man implements Person{
	public void makePerson()
	{
		System.out.println("制造一个男人");
	}
}

(3)具体类Woman

public class Woman implements Person{
	public void makePerson()
	{
		System.out.println("制造一个女人");
	}
}

(4)具体类Robot

public class Robot implements Person{
	public void makePerson()
	{
		System.out.println("制造一个机器人");
	}
}

(5)工厂类Nvwa

public class Nvwa {
	public static Person getPerson(String sex) {
			if(sex.equalsIgnoreCase("M"))
			{
				return  new Man();
			}
			if(sex.equalsIgnoreCase("W"))
			{
				return new Woman();
			}
			if(sex.equalsIgnoreCase("R"))
			{
				return new Robot();
			}
			else 
			{
				return null;
			}
		}
}

(6)实现Client类

class Client {
	public static void main(String[] args) {
		Person p;
		p=Nvwa.getPerson("M");
		p.makePerson();
	}
}

2、工厂方法模式(空调)
(1)抽象空调类

public interface AIR {
	void work();
}

(2)具体Haier空调类

public class HaierAIR implements AIR{
	public void work()
	{
		System.out.println("HaierAirCondition working!");
	}
}

(3)具体Midea空调类

public class MideaAIR implements AIR{
	public void work()
	{
		System.out.println("MideaAirCondition working!");
	}
}

(4)抽象工厂类

public interface AIRFactory {
	AIR produceAIR();
}

(5)具体Haier工厂类

public class HaierAIRFactory implements AIRFactory{
	public HaierAIR produceAIR()
	{
		System.out.println("HaierAirCondition produced!");
		return new HaierAIR();
	}
}

(6)具体Midea工厂类

public class MideaAIRFactory implements AIRFactory{
	public MideaAIR produceAIR()
	{
		System.out.println("MideaAirCondition produced!");
		return new MideaAIR();
	}
}

(7)实现Test类

public class Test {
	public static void main(String[] args) {
		AIRFactory AIRfactory=new HaierAIRFactory();
		AIR air=AIRfactory.produceAIR();
		
		AIRfactory=new MideaAIRFactory();
		air=AIRfactory.produceAIR();
	}
}

3、抽象工厂模式(电脑)
(1)抽象CPU类

public interface CPU {
	void discribe();
}

(2)具体PcCPU类

public class PcCPU implements CPU{
	public void discribe()
	{
		System.out.println("This is produce the PC_CPU");
	}
}

(3)具体MacCPU类

public class MacCPU implements CPU {
	public void discribe()
	{
		System.out.println("This is produce the Mac_CPU");
	}
}

(4)抽象RAM类

public interface RAM {
	void discribe();
}

(5)具体PcRAM类

public class PcRAM implements RAM{
	public void discribe()
	{
		System.out.println("PcRAM");
	}
}

(6)具体MacRAM类

public class MacRAM implements RAM{
	public void discribe()
	{
		System.out.println("MacRAM");
	}
}

(7)抽象电脑配件工厂类

public interface ComputerAccessoriesFactory {
	CPU produceCPU();
	RAM produceRAM();
}

(8)具体Pc工厂类

public class PcFactory implements ComputerAccessoriesFactory{
	public PcCPU produceCPU() {
		System.out.println("PC_CPU produced!");
		return new PcCPU();
	}
	public PcRAM produceRAM() {
		System.out.println("PC_RAM produced!");
		return new PcRAM();
	}
}

(9)具体Mac工厂类

public class MacFactory implements ComputerAccessoriesFactory{
	public MacCPU produceCPU() {
		System.out.println("MAC_CPU produced!");
		return new MacCPU();
	}
	public MacRAM produceRAM() {
		System.out.println("MAC_RAM produced!");
		return new MacRAM();
	}
}

(10)实现Test类

public class Test {
	public static void main(String[] args) {
		ComputerAccessoriesFactory a=new PcFactory();
		ComputerAccessoriesFactory b=new MacFactory();
		CPU cpu=a.produceCPU();
		RAM ram=b.produceRAM();
		cpu.discribe();
		ram.discribe();
	}
}

四、运行结果
1、简单工厂模式(女娲造人)
在这里插入图片描述
2、工厂方法模式(空调)
在这里插入图片描述
3、抽象工厂模式(电脑)
在这里插入图片描述
五、经验归纳
之前在java课上学的接口印象很笼统,只知道它是用来干什么的,但并没有实际应用过,通过本次作业,对于接口(接口的实现等)、抽象类与具体类等都有了更深的了解,也更深的了解了三种设计模式(简单工厂模式、工厂方法模式、抽象工厂模式)的不同或优势,如简单工厂模式只需客户输入参数但是如果要拓展程序就很麻烦需要修改之前的不少代码,工厂方法模式在要增加新的功能时直接增加新的工厂类就不需要修改之前的代码,抽象工厂模式较好地实现了“开放-封闭”原则可以定义不止一个的接口并且一个工厂也可以生成不止一个产品类,在接口、抽象类及具体类之间的运用有了一定基础。

参考资料:https://blog.csdn.net/auuea/article/details/84673570

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我们来看一下如何使用建造者模式在 Java 中实现女娲造人。 首先,我们需要先定义一个人类的基本属性,例如姓名、性别、年龄等等。这些属性可以组成一个 Person 类: ```java public class Person { private String name; private String gender; private int age; public Person(String name, String gender, int age) { this.name = name; this.gender = gender; this.age = age; } // 省略 getter 和 setter 方法 } ``` 接下来,我们需要定义一个 Builder 类,用于构建 Person 对象。Builder 类需要包含和 Person 类相同的属性,同时还需要提供一些方法来设置这些属性: ```java public class PersonBuilder { private String name; private String gender; private int age; public PersonBuilder setName(String name) { this.name = name; return this; } public PersonBuilder setGender(String gender) { this.gender = gender; return this; } public PersonBuilder setAge(int age) { this.age = age; return this; } public Person build() { return new Person(name, gender, age); } } ``` 在 Builder 类中,我们提供了三个方法来设置 Person 的属性,并且每个方法都返回 Builder 对象本身,这样就可以链式调用多个方法来设置属性。最后,我们还提供了一个 build 方法来构建 Person 对象。 接下来,我们就可以使用 Builder 类来构建 Person 对象了: ```java Person person = new PersonBuilder() .setName("张三") .setGender("男") .setAge(20) .build(); ``` 这里我们首先创建了一个 PersonBuilder 对象,然后链式调用 setName、setGender 和 setAge 方法来设置属性,最后调用 build 方法来构建 Person 对象。 这就是使用建造者模式在 Java 中实现女娲造人的方法。建造者模式可以让代码更加清晰、简洁,并且易于扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值