1.题目分析
- 简单工厂模式
使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,请实现该场景。现需要增加一个新的Robot类,如果传入参数R,则返回一个Robot对象,对代码进行修改并注意女娲的变化。
- 工厂方法模式
海尔工厂(Haier)生产海尔空调(HaierAirCondition),美的工厂(Midea)生产美的空调(MideaAirCondition) 。使用工厂方法模式描述该场景,绘制类图并编程实现。
- 抽象工程模式
电脑配件生产工厂生产内存、CPU等硬件设备,这些内存、CPU的品牌、型号并不一定相同,根据下面的“产品等级结构-产品族”示意图,使用抽象工厂模式实现电脑配件生产过程并绘制相应的类图,绘制类图并编程实现。
2.类图设计
使用UML的类图结构设计。
①简单工厂模式
②工厂方法模式
③抽象工程模式
3.程序实现
//①简单工厂模式 package 简单工厂模式; //抽象产品角色 public interface Nvwa { public abstract void Person(); } //具体产品角色Man public class Man implements Nvwa { public void Person() { System.out.println("Man"); } } //具体产品角色Woman public class Woman implements Nvwa { public void Person() { System.out.println("Woman"); } } //具体产品角色Robot public class Robot implements Nvwa{ public void Person() { System.out.println("Robot"); } } //工厂类Nvwa public class NvwaFactory { public static Nvwa Create(String p) throws Exception { if(p.equalsIgnoreCase("M")) { System.out.println("Man"); return new Man(); } else if(p.equalsIgnoreCase("W")) { System.out.println("Woman"); return new Woman(); } else if(p.equalsIgnoreCase("R")) { System.out.println("Robot"); return new Robot(); } else { throw new Exception("输入错误"); } } } //客户类Client public class Client { public static void main(String[] args) throws Exception { try { Nvwa nvwa; nvwa = NvwaFactory.Create("W"); nvwa = NvwaFactory.Create("M"); nvwa = NvwaFactory.Create("R"); } catch(Exception e) { System.out.println(e.getMessage()); } } } //②工厂方法模式 package 工厂方法模式; //抽象产品AirCondition public interface AirCondition { public abstract void play(); } //具体产品类HaierAirCondition public class HaierAirCondition implements AirCondition{ public void play() { System.out.println("海尔空调使用中..."); } } //具体产品类MideaAirCondition public class MideaAirCondition implements AirCondition { public void play() { System.out.println("美的空调使用中"); } } //抽象工厂AirConditionFactory public interface AirConditionFactory { public abstract AirCondition produceAirCondition(); } //具体工厂类HaierFactory public class HaierFactory implements AirConditionFactory{ public AirCondition produceAirCondition() { System.out.println("海尔空调工厂生产海尔空调。"); return new HaierAirCondition(); } } //具体工厂类MideaFactory public class MideaFactory implements AirConditionFactory{ public AirCondition produceAirCondition() { System.out.println("美的空调工厂生产美的空调。"); return new MideaAirCondition(); } } //客户类Client public class Client { public static void main(String args[]) { AirConditionFactory AirConditionFactory=new HaierFactory(); AirCondition air = AirConditionFactory.produceAirCondition(); AirConditionFactory= new MideaFactory(); air=AirConditionFactory.produceAirCondition(); } } //③抽象工程模式 package 抽象工程模式; //抽象工厂 public interface Factory { public abstract CPU ProduceCPU(); public abstract RAM ProduceRAM(); } //具体工厂类MacFactory public class MacFactory implements Factory{ public CPU ProduceCPU() { System.out.println("工厂Mac生产CPU"); return new MacCPU(); } public RAM ProduceRAM() { System.out.println("工厂Mac生产RAM"); return new MacRAM(); } } //具体工厂类PcFactory public class PcFactory implements Factory { public CPU ProduceCPU() { System.out.println("工厂Pc生产CPU"); return new PcCPU(); } public RAM ProduceRAM() { System.out.println("工厂Pc生产RAM"); return new PcRAM(); } } //抽象产品CPU public interface CPU { public abstract void Produce(); } //具体产品类MacCPU public class MacCPU implements CPU{ public void Produce() { System.out.println("This is the MacCPU"); } } //具体产品类PcCPU class PcCPU implements CPU{ public void Produce() { System.out.println("This is the PcCPU"); } } //抽象产品RAM public interface RAM { public abstract void Produce(); } //具体产品类MacRAM public class MacRAM implements RAM{ public void Produce() { System.out.println("This is the MacRAM"); } } //具体产品类PcRAM class PcRAM implements RAM{ public void Produce() { System.out.println("This is the PcRAM"); } } //客户类Client public class Client { public static void main(String[] args) { Factory a=new PcFactory(); Factory b=new MacFactory(); CPU cpu=a.ProduceCPU(); RAM ram=b.ProduceRAM(); cpu.Produce(); ram.Produce(); } }
4.调试、测试及运行结果
运行结果:
①简单工厂模式
②工厂方法模式
③抽象工程模式
5.经验归纳
①在本次关于三种设计模式的上机中,由于用的语言是Java,平时没咋用过Java,对Java不是很熟悉,写代码过程中用到了有关抽象类接口的知识,借此巩固了Java语言。
②在写主函数的实例化对象和调用函数时,出现了错误,在参考别人的代码后,解决了问题。
③此次上机中也熟悉了三种设计模式,了解了三种设计模式的优缺点。
设计模式
最新推荐文章于 2024-08-30 08:45:28 发布