抽象工厂包含的角色:
1、抽象工厂(AbstractFactory)
2、具体工厂(ConcreteFactory)
3、抽象产品(AbstractProduct)
4、具体产品(Product)
//抽象产品类
public interface Television {
public void play();
}
//具体产品类
public class HaierTelevision implements Television {
@Override
public void play() {
System.out.println("海尔电视机播放中。。。。。。");
}
}
//具体产品类
public class TCLTelevision implements Television{
@Override
public void play() {
// TODO Auto-generated method stub
System.out.println("TCL电视机播放中。。。。。");
}
}
//抽象产品类
public interface AirConditioner {
public void changTemperature();
}
//具体产品类
public class HaierAirConditioner implements AirConditioner{
@Override
public void changTemperature() {
// TODO Auto-generated method stub
System.out.println("海尔空调温度改变中。。。。。。。。");
}
}
//具体产品类
public class TCLAirConditioner implements AirConditioner{
@Override
public void changTemperature() {
// TODO Auto-generated method stub
System.out.println("TCL空调温度改变中。。。。。。。");
}
}
//抽象工厂类(电器工厂类)
public interface EFactory {
public Television producedTelevision();
public AirConditioner producedAirConditioner();
}
//具体工厂类(海尔工厂类)
public class HaierFactory implements EFactory{
@Override
public Television producedTelevision() {
return new HaierTelevision();
}
@Override
public AirConditioner producedAirConditioner() {
return new HaierAirConditioner();
}
}
//具体工厂类(TCL工厂类)
public class TCLFactory implements EFactory{
@Override
public Television producedTelevision() {
// TODO Auto-generated method stub
return new TCLTelevision();
}
@Override
public AirConditioner producedAirConditioner() {
// TODO Auto-generated method stub
return new TCLAirConditioner();
}
}
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class XMLUtil {//XML操作工具类
public static Object getBean(){
try {
//创建文档对象
DocumentBuilderFactory dFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder=dFactory.newDocumentBuilder();
Document doc;
doc=dBuilder.parse(new File("configTV.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) {
// TODO: handle exception
e.printStackTrace();
return null;
}
}
}
public class Client {
public static void main(String[] args) {
try {
//抽象工厂类(电器工厂类)
EFactory factory;
//抽象产品
Television tv;
AirConditioner ac;
//获得具体产品对应的具体工厂类
factory =(EFactory)XMLUtil.getBean();
tv=factory.producedTelevision();
tv.play();
ac=factory.producedAirConditioner();
ac.changTemperature();
} catch (Exception e) {
// TODO: handle exception
}
}
}
<?xml version = "1.0"?>
<config>
<className>HaierFactory</className>
</config>