java抽象工厂设计模式_JAVA设计模式之【抽象工厂模式】

8a81fb477f356af7d6c6a11b6cd3b72e.png

1.产品接口,电视和空调

public interface Television // 电视接口

{

public void play();

}

public interface AirConditioner // 空调

{

public void changeTemperature();

}

2.电子工厂接口,生产电视和空调

public interface EFactory //E工厂接口

{

public Television produceTelevision(); // 生产电视

public AirConditioner produceAirConditioner(); // 生产空调

}

3.具体工厂

海尔工厂生产海尔电视和海尔空调

public class HaierFactory implements EFactory // 海尔工厂

{

public Television produceTelevision()

{

return new HaierTelevision();

}

public AirConditioner produceAirConditioner()

{

return new HairAirConditioner();

}

}

TCL工厂生产TCL电视和TCL空调

public class TCLFactory implements EFactory // TCL工厂

{

public Television produceTelevision()

{

return new TCLTelevision();

}

public AirConditioner produceAirConditioner()

{

return new TCLAirConditioner();

}

}

4.具体产品,海尔电视,海尔空调

public class HaierTelevision implements Television // 海尔电视

{

public void play()

{

System.out.println("海尔电视机播放中......");

}

}

public class HairAirConditioner implements AirConditioner // 海尔空调

{

public void changeTemperature()

{

System.out.println("海尔空调温度改变中......");

}

}

TCL电视,TCL空调

public class TCLTelevision implements Television // TCL电视

{

public void play()

{

System.out.println("TCL电视机播放中......");

}

}

public class TCLAirConditioner implements AirConditioner // TCL空调

{

public void changeTemperature()

{

System.out.println("TCL空调温度改变中......");

}

}

5.配置与获取配置类

TCLFactory

import javax.xml.parsers.*;

import org.w3c.dom.*;

import org.xml.sax.SAXException;

import java.io.*;

public class XMLUtil

{

//该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象

public static Object getBean()

{

try

{

//创建文档对象

DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();

DocumentBuilder builder = dFactory.newDocumentBuilder();

Document doc;

doc = builder.parse(new File("./src/config.xml"));

//获取包含类名的文本节点

NodeList nl = doc.getElementsByTagName("className");

Node classNode=nl.item(0).getFirstChild();

String cName=classNode.getNodeValue();

//通过类名生成实例对象并将其返回

Class c=Class.forName(cName);

Object obj=c.newInstance();

return obj;

}

catch(Exception e)

{

e.printStackTrace();

return null;

}

}

}

6.客户端调用

public class Client

{

public static void main(String args[])

{

try

{

EFactory factory; // 电子工厂

Television tv; // TV

AirConditioner ac; // 空调

factory=(EFactory)XMLUtil.getBean();

// factory = new HaierFactory();

// factory = new TCLFactory();

tv=factory.produceTelevision(); // 工厂生产电视

tv.play(); // 电视播放

ac=factory.produceAirConditioner(); // 工厂生产空调

ac.changeTemperature(); // 空调调节温度

}

catch(Exception e)

{

System.out.println(e.getMessage());

}

}

}

结果:

TCL电视机播放中......

TCL空调温度改变中......

类图关系如下,

2e68b2c72711e8ca8afa7022b8687aec.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值