• JAVA设计模式之【抽象工厂模式】


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

    类图关系如下,

  • 相关阅读:
    网络编程Netty IoT百万长连接优化
    使用 .NET 4.6.2 中的 HttpClientFactory(Use HttpClientFactory from .NET 4.6.2)
    无人值守停车场收费解决方案
    将普通用户加入到串口可以使用/dev/ttyS0或/dev/ttyUSB0的方法 微信公众号
    什么是车规级、车轨级芯片 微信公众号
    三个问题
    使用百度的一些隐私设置
    鼠标滚轮放大图片
    wamp 报错:The configuration file contains a syntax error on line
    PHP 存在不受控制的递归漏洞
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/5914337.html
Copyright © 2020-2023  润新知