首页 > 其他 > 详细

抽象工厂

时间:2014-12-12 02:17:09      阅读:310      评论:0      收藏:0      [点我收藏+]

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

?

?

bubuko.com,布布扣

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

bubuko.com,布布扣

在这里有个设备工厂(抽象的)他生产两种设备,分别是电视机和空调,但是涉及到品牌的区别,所以有两个具体的设备工厂,分别是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());
         }
	}
}

?

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

抽象工厂

原文:http://gagapear.iteye.com/blog/2165593

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!