我是靠谱客的博主 爱听歌白云,最近开发中收集的这篇文章主要介绍抽象工厂模式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

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

下面举例:电器工厂

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

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>




最后

以上就是爱听歌白云为你收集整理的抽象工厂模式的全部内容,希望文章能够帮你解决抽象工厂模式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(29)

评论列表共有 0 条评论

立即
投稿
返回
顶部