概述
比工厂方法模式 的抽象程度更高,这个模式中,具体工厂可以生产相关的一组具体产品,
这样的一组产品称之为产品族,产品族中的每一个产品都分属于某一个产品继承等级结构。
下面举例:电器工厂
一个电器工厂可以生产多种类型的电器,如海尔工厂可以生产海尔电视机、海尔空调等,
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>
最后
以上就是爱听歌白云为你收集整理的抽象工厂模式的全部内容,希望文章能够帮你解决抽象工厂模式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复