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

简介:

422101-20160927210957485-220665994.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.配置与获取配置类

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

类图关系如下,
422101-20160927214111438-1818612535.jpg



本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/5914337.html,如需转载请自行联系原作者

相关文章
|
3月前
|
设计模式 Java 机器人
Java设计模式-建造者模式
建造者(Builder)模式指将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。它是把对象的构建和表述分离。
44 0
Java设计模式-建造者模式
|
4月前
|
设计模式 Java
Java设计模式【三】:抽象工厂模式
Java设计模式【三】:抽象工厂模式
19 0
|
设计模式 Java
【Java设计模式】② 简单工厂模式
工厂模式分为**简单工厂模式**,**工厂方法模式**和**抽象工厂模式**,它们都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽取了出来,目的是降低系统中代码耦合度,并且增强系统的扩展性。
110 0
【Java设计模式】② 简单工厂模式
|
设计模式 Java
Java设计模式-工厂模式(3)抽象工厂模式
Java设计模式-工厂模式(3)抽象工厂模式
148 0
Java设计模式-工厂模式(3)抽象工厂模式
|
设计模式 Java
Java设计模式-工厂模式(2)工厂方法模式
Java设计模式-工厂模式(2)工厂方法模式
176 0
Java设计模式-工厂模式(2)工厂方法模式
|
设计模式 Java
【玩转23种Java设计模式】创建型模式篇:抽象工厂模式
抽象工厂模式提供一个创建产品族的接口,其每个子类可以生产一系列相关的产品。
【玩转23种Java设计模式】创建型模式篇:抽象工厂模式
|
设计模式 Oracle Java
【玩转23种Java设计模式】创建型模式篇:工厂方法模式
工厂方法模式,是⼀种创建型设计模式。定义一个用于创建产品的接口,由子类决定生产什么产品。
【玩转23种Java设计模式】创建型模式篇:工厂方法模式
|
设计模式 Java
【每天一个java设计模式(二)】 - 抽象工厂模式
【每天一个java设计模式(二)】 - 抽象工厂模式
81 0
【每天一个java设计模式(二)】 - 抽象工厂模式
|
设计模式 Java Android开发
Java设计模式——工厂模式与抽象工厂模式
Java设计模式——工厂模式与抽象工厂模式
101 0
Java设计模式——工厂模式与抽象工厂模式
|
设计模式 Java
【Java设计模式系列】工厂方法模式(上)
【Java设计模式系列】工厂方法模式(上)
81 0
【Java设计模式系列】工厂方法模式(上)

热门文章

最新文章