`
gagapear
  • 浏览: 9672 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

抽象工厂

阅读更多

在工厂方法模式中具体的工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个方法。但是有时候我们需要一个工厂可以提供多个产品的对象,而不是一个单一的产品对象。

 

 

为了更好的理解抽象工厂,我引入另外一个实例:

在这里有个设备工厂(抽象的)他生产两种设备,分别是电视机和空调,但是涉及到品牌的区别,所以有两个具体的设备工厂,分别是Haier和TCL,他们都能生产自己家品牌的电视机和空调。

 

Code:

设备工厂以及具体设备工厂

public interface EFactory
{
	public Television produceTelevision();
	public AirConditioner produceAirConditioner();
}

public class TCLFactory implements EFactory
{
	public Television produceTelevision()
	{
		return new TCLTelevision();
	}
	
	public AirConditioner produceAirConditioner()
	{
		return new TCLAirConditioner();
	}
}

public class HaierFactory implements EFactory
{
	public Television produceTelevision()
	{
		return new HaierTelevision();
	}
	
	public AirConditioner produceAirConditioner()
	{
		return new HairAirConditioner();
	}
}

 

电视产品

public interface Television
{
	public void play();
}

public class TCLTelevision implements Television
{
	public void play()
	{
		System.out.println("TCL Playing.....");
	}
}

public class HaierTelevision implements Television
{
	public void play()
	{
		System.out.println("Haier Playing......");
	}
}

 

空调产品

public interface AirConditioner
{
	public void changeTemperature();
}

public class HairAirConditioner implements AirConditioner
{
	public void changeTemperature()
	{
		System.out.println("Haier Change Temperature.....");
	}
}

public class TCLAirConditioner implements AirConditioner
{
	public void changeTemperature()
	{
		System.out.println("TCL Change Temperature.....");
	}
}

 

Cilent

public class Client
{
	public static void main(String args[])
	{
         try
         {
         	EFactory factory;
         	Television tv;
         	AirConditioner ac;
         	factory= new HaierFactory();
         	tv=factory.produceTelevision();
         	tv.play();
         	ac=factory.produceAirConditioner();
         	ac.changeTemperature();
         }
         catch(Exception e)
         {
         	System.out.println(e.getMessage());
         }
	}
}

 

所以说当通过工厂想得到的对象不仅仅是单个的前提下,可以考虑使用抽象工厂。

2
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics