抽象工厂模式

比工厂方法模式 的抽象程度更高,这个模式中,具体工厂可以生产相关的一组具体产品,

这样的一组产品称之为产品族,产品族中的每一个产品都分属于某一个产品继承等级结构。

下面举例:电器工厂

一个电器工厂可以生产多种类型的电器,如海尔工厂可以生产海尔电视机、海尔空调等,

TCL工厂可以生产TCL电视机、TCL空调等,相同品牌的电器构成一个产品族,

而相同类型的电器够成了一个产品等级结构。


源码下载:下载地址

package com.th.designedmodemofchouxianggongchang;
/********
 * 	抽象产品类Television(电视机类)
 * 	它可以是一个接口,也可以是一个抽象类
 * 	其中包含业务方法 	play() 的声明
*/
public interface Television {
	public void play();
}

package com.th.designedmodemofchouxianggongchang;
/******
 * HaierTelevision 是 Television 的子类
 * 实现了在 Television 中定义的业务方法 play()
 * */
public class HaierTelevision implements Television {

	@Override
	public void play() {
		System.out.println("海尔电视机播放中......");
	}
}

package com.th.designedmodemofchouxianggongchang;
/*****
 *	TCLTelevision 是 Television 的另一个子类
 * 	也实现了在 Television 中定义的业务方法 play()
 * */
public class TCLTelevision implements Television {

	@Override
	public void play() {
		System.out.println("TCL电视机播放中......");
	}
}

package com.th.designedmodemofchouxianggongchang;
/*******
 * 	AirConditioner 是另一种抽象产品类,
 * 	它可以是一个接口,也可以是一个抽象类
 * 	其中包含业务方法 changeTemperature() 的声明
 * */
public interface AirConditioner {
	public void changeTemperature();
}

package com.th.designedmodemofchouxianggongchang;
/******
 * 	HaierAirConditioner 是 AirConditioner 的子类
 * 	实现了在 AirConditioner 中定义 的业务方法 changeTemperature()
 * */
public class HaierAirConditioner implements AirConditioner {

	@Override
	public void changeTemperature() {
		System.out.println("海尔空调温度改变中......");
	}
}

package com.th.designedmodemofchouxianggongchang;
/******
 * 	TCLAirConditioner 也是 AirConditioner 的子类
 * 	实现了在 AirConditioner 中定义 的业务方法 changeTemperature()
 * */
public class TCLAirConditioner implements AirConditioner {

	@Override
	public void changeTemperature() {
		System.out.println("TCL空调温度改变中......");
	}
}

package com.th.designedmodemofchouxianggongchang;
/*
 * 	抽象工厂类,定义了抽象工厂方法
 * 	针对每一个产品族 的产品都提供了一个对应的工厂方法
 * */
public interface EFactory {
	public Television produceTelevision();
	public AirConditioner produceAirConditoner();
}

package com.th.designedmodemofchouxianggongchang;
/*****
 * 	HaierFactory 是 EFactory 的一个子类
 * 	实现了在 EFactory 中定义的工厂方法,用于创建具体产品对象
 * 	HaierFactory 所生产的具体产品构成了一个产品族
 * */
public class HaierFactory implements EFactory {

	@Override
	public Television produceTelevision() {
		
		return new HaierTelevision();
	}

	@Override
	public AirConditioner produceAirConditoner() {
		return new HaierAirConditioner();
	}
}

package com.th.designedmodemofchouxianggongchang;
/*****
 * 	TCLFactory 也是 EFactory 的一个子类
 * 	实现了在 EFactory 中定义的工厂方法,用于创建具体产品对象
 * 	TCLFactory 所生产的具体产品构成了一个产品族
 * */
public class TCLFactory implements EFactory {

	@Override
	public Television produceTelevision() {
		
		return new TCLTelevision();
	}

	@Override
	public AirConditioner produceAirConditoner() {
		return new TCLAirConditioner();
	}
}

package com.th.designedmodemofchouxianggongchang;


import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.io.*;

public class XMLUtil {
	public static Object getBean()
	{
		try
		{
			DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = dFactory.newDocumentBuilder();
			Document doc;
			doc = builder.parse(new File("config.xml"));
			
			NodeList nl = doc.getElementsByTagName("className");
			Node classNode = nl.item(0).getFirstChild();
			String cName = classNode.getNodeValue().trim();
			
			Class c = Class.forName(cName);
			Object obj = c.newInstance();
			return obj;
		}
		catch (Exception e)
		{
			e.printStackTrace();
			return null;
		}
	}
}

package com.th.designedmodemofchouxianggongchang;
/*****
 * 	客户端测试类 Client
 * */
public class Client {

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


配置文件,若生产海尔电视机和空调直接修改此文件即可
<?xml version="1.0" ?>
<config>
	<className>com.th.designedmodemofchouxianggongchang.TCLFactory</className>
</config>




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值