java设计模式之抽象工厂模式

来源:互联网 发布:骤风软件价格 编辑:程序博客网 时间:2024/04/30 01:23

抽象工厂包含的角色:

1、抽象工厂(AbstractFactory)

2、具体工厂(ConcreteFactory)

3、抽象产品(AbstractProduct)

4、具体产品(Product)

//抽象产品类public interface Television {public void play();}
//具体产品类public class HaierTelevision implements Television {@Overridepublic void play() {System.out.println("海尔电视机播放中。。。。。。");}}

//具体产品类public class TCLTelevision implements Television{@Overridepublic void play() {// TODO Auto-generated method stubSystem.out.println("TCL电视机播放中。。。。。");}}

//抽象产品类public interface AirConditioner {public void changTemperature();}

//具体产品类public class HaierAirConditioner implements AirConditioner{@Overridepublic void changTemperature() {// TODO Auto-generated method stubSystem.out.println("海尔空调温度改变中。。。。。。。。");}}

//具体产品类public class TCLAirConditioner implements AirConditioner{@Overridepublic void changTemperature() {// TODO Auto-generated method stubSystem.out.println("TCL空调温度改变中。。。。。。。");}}

//抽象工厂类(电器工厂类)public interface EFactory {public Television producedTelevision();public AirConditioner producedAirConditioner();}

//具体工厂类(海尔工厂类)public class HaierFactory implements EFactory{@Overridepublic Television producedTelevision() {return new HaierTelevision();}@Overridepublic AirConditioner producedAirConditioner() {return new HaierAirConditioner();}}

//具体工厂类(TCL工厂类)public class TCLFactory implements EFactory{@Overridepublic Television producedTelevision() {// TODO Auto-generated method stubreturn new TCLTelevision();}@Overridepublic AirConditioner producedAirConditioner() {// TODO Auto-generated method stubreturn 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 exceptione.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>


0 0