JAVA设计模式之【抽象工厂模式】
2023-09-27 14:24:31 时间
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.配置与获取配置类
<?xml version="1.0"?>
<config>
<className>TCLFactory</className>
</config>
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空调温度改变中......
类图关系如下,
相关文章
- 我以订披萨为例,给女朋友详细讲了Java设计模式的3种工厂模式
- java 多线程 Callable中的futrue模式
- java设计模式--结构型模式--桥接模式
- java设计模式--行为型模式--状态模式
- Java设计模式-责任链模式(Chain of Responsibility)
- Java设计模式-观察者模式(Observer)
- Java设计模式-模板方法模式(Template Method)
- Java设计模式-桥接模式(Bridge)
- Java设计模式-工厂方法模式(Factory Method)
- [JAVA设计模式]第三部分:结构模式
- Java 设计模式之单例模式
- 【java设计模式初探0】_单例模式
- 【Java 设计模式 · 结构型】适配器模式(Adapter Pattern)
- 【Java 设计模式 · 创建型】浅拷贝 & 深拷贝、原型模式(Prototype Pattern)
- java设计模式----观察者模式
- java设计模式----代理模式
- java设计模式----适配器模式
- java模式之装饰模式
- JAVA 设计模式 中介者模式
- JAVA 设计模式 外观模式
- JAVA 设计模式 装饰者模式
- 详解23种设计模式(基于Java)—— 行为型模式(四 / 五)
- 【每天一个java设计模式(一)】 - 工厂模式
- java设计模式之享元模式
- java之设计模式工厂三兄弟之工厂方法模式
- java之设计模式工厂三兄弟之简单工厂模式
- 【JAVA长虹键法】第六式 原型模式(23种设计模式)
- JAVA设计模式——第 8 章 适配器模式【Adapter Pattern】(转)
- JAVA设计模式——第 4 章 多例模式【Multition Pattern】(转)
- Java设计模式之单例模式