创建型模式的应用(二)抽象工厂模式

一个电器工厂可以产生多种类型的电器,如海尔工厂可以生产海尔电视机、海尔空调等,TCL工厂可以生产TCL电视机、TCL空调等,相同品牌的电器构成一个产品族,而相同类型的电器构成一个产品等级结构,使用抽象工厂模式模拟该场景,要求绘制相应的类图并用Java语言模拟实现。

20软2

 第一步,定义一个抽象类EFactory(抽象工厂角色)

public abstract class EFactory 
{
   public Television produceTelevision() 
   {return null;}
   public Air produceAir() 
   {return null;}
}

第二步,定义EFactory的具体实现类(具体工厂角色)

具体工厂角色HaierFactory

public class HaierFactory extends EFactory 
{
   public Television produceTelevision() 
   {
	   Television tel=new HaierTelevision();
	   return tel;
}
   public Air produceAir() 
   {
	   Air air=new HaierAir();
       return air;
   }
}

具体工厂角色TCLFactory

public class TCLFactory extends EFactory 
{
   public Television produceTelevision() 
   {
	   Television tel=new TCLTelevision();
	   return tel;
   }
   public Air produceAir() 
   {
	   Air air=new TCLAir();
       return air;
   }
}

第三步,定义一个抽象类Television(抽象产品角色)

public abstract class Television 
{
   public void play() {}
}

第四步,定义Television的具体实现类(具体产品角色)

具体产品角色HaierTelevision

public class HaierTelevision extends Television 
{
   public void play() 
   {
	   System.out.println("我是一台海尔电视机");
   }
}

具体产品角色TCLTelevision

public class TCLTelevision extends Television 
{
   public void play() 
   {
	   System.out.println("我是一台TCL电视机");
   }
}

第五步,定义一个抽象类Air(抽象产品角色)

public abstract class Air 
{
   public void changeTemp() {}
}

第六步,定义Air的具体实现类(具体产品角色)

具体产品角色HaierAir

public class HaierAir extends Air 
{
   public void changeTemp() 
   {
	   System.out.println("我是一台海尔空调");
   }
}

具体产品角色TCLAir

public class TCLAir extends Air

{

   public void changeTemp()

   {

       System.out.println("我是一台TCL空调");

   }

}

第七步,定义一个测试类Client

import java.util.Scanner;
public class Client {
	public static EFactory Haierfac,TCLfac;
	public static Air Haierair,TCLair;
	public static Television Haiertelevision,TCLtelevision;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		   Scanner sc =new Scanner(System.in);
		   Haierfac = new HaierFactory();
		   TCLfac = new TCLFactory();
		   Haierair = Haierfac.produceAir();
		   Haiertelevision = Haierfac.produceTelevision();
		   TCLair = TCLfac.produceAir();
		   TCLtelevision = TCLfac.produceTelevision();
		   while(true)
		   {
			   System.out.println("请输入您的选择:"+"\n"
			   		+ "输入”1“:生产海尔空调"+"\n"
			   		+ "输入”2“:生产TCL空调"+"\n"
			   		+ "输入”3“:生产海尔电视机"+"\n"
			   		+ "输入”4“:生产TCL电视机");
			   int i=sc.nextInt();
			   if(i==1){
				   Haierair.changeTemp() ; 
				   }
			   else if(i==2){
				   TCLair.changeTemp();
				   }
			   else if(i==3){
				   Haiertelevision.play();
				   }
			   else if(i==4){
				   TCLtelevision.play();
				   }
			   else {
				   System.out.println("您的输入有误,请按照提示输入!");
				   }
		   }
	}
}

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秃头小霸王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值