设计模式

1.题目分析

  1. 简单工厂模式

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

  1. 工厂方法模式

海尔工厂(Haier)生产海尔空调(HaierAirCondition),美的工厂(Midea)生产美的空调(MideaAirCondition) 。使用工厂方法模式描述该场景,绘制类图并编程实现。

  1. 抽象工程模式

电脑配件生产工厂生产内存、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语言。

②在写主函数的实例化对象和调用函数时,出现了错误,在参考别人的代码后,解决了问题。

③此次上机中也熟悉了三种设计模式,了解了三种设计模式的优缺点。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值