一、题目分析
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课上学的接口印象很笼统,只知道它是用来干什么的,但并没有实际应用过,通过本次作业,对于接口(接口的实现等)、抽象类与具体类等都有了更深的了解,也更深的了解了三种设计模式(简单工厂模式、工厂方法模式、抽象工厂模式)的不同或优势,如简单工厂模式只需客户输入参数但是如果要拓展程序就很麻烦需要修改之前的不少代码,工厂方法模式在要增加新的功能时直接增加新的工厂类就不需要修改之前的代码,抽象工厂模式较好地实现了“开放-封闭”原则可以定义不止一个的接口并且一个工厂也可以生成不止一个产品类,在接口、抽象类及具体类之间的运用有了一定基础。