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空调温度改变中......

类图关系如下,

最新文章

  1. [NHibernate]条件查询Criteria Query
  2. Java中常见数据结构:list与map -底层如何实现
  3. sqlite数据库 select 查询带换行符数据
  4. WireShark系列: 使用WireShark过滤条件抓取特定数据流(zz)
  5. CKEditor + CKFinder 实现编辑上传图片配置 (二)
  6. Oracle单表的复杂查询
  7. Android 记录的(MediaRecorder)而播放(MediaPlayer)
  8. Android OpenGL ES(六)创建实例应用OpenGLDemos程序框架 .
  9. hdu1269强连通分量入门题
  10. string,char*,int 之间的转化
  11. 输入一个正数n,输出所有和为n连续正数序列。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。
  12. junit测试
  13. git使用常见问题
  14. Spring基础2
  15. CSS单位和颜色表
  16. 对node.js的理解?
  17. JavaScript之能力与硬件检测[小结]
  18. Error in building opencv with ffmpeg
  19. 把mongodb服务添加到系统服务中,报错:[sc] openscmanager 失败 5
  20. Slf4j+LogBack使用参考

热门文章

  1. HTTP1.1缓存策略
  2. html之cellspacing &amp;&amp; cellpadding讲解
  3. .NET设计模式(7):创建型模式专题总结(Creational Pattern)(转)
  4. [翻译]The Neophyte&#39;s Guide to Scala Part 12: Type Classes
  5. NGUI无法按住鼠标按住时无法监听OnHover事件
  6. 使用tomcat7创建异步servlet
  7. nested pop animation can result in corrupted navigation bar
  8. CLIP PATH (MASK) GENERATOR是一款在线制作生成clip-path路径的工具,可以直接生成SVG代码以及配合Mask制作蒙板。
  9. 关于com组件注册的问题
  10. JAVA IO 类库详解